Mam wątku, który ma tylko pracować, gdy pewna okoliczność przychodzi inaczej to po prostu iteracje nad pustym nieskończonej pętli.Java wydajność nieskończona pętla
public void run() {
while(true) {
if(ball != null) {
// do some Calculations
}
}
}
to wpływa na wydajność, gdy pętla faktycznie robi nic, ale musi sprawdzić, czy musi wykonywać obliczenia w każdej iteracji? Tworzenie tego wątku tylko w razie potrzeby nie jest dla mnie opcją, ponieważ moja klasa, która implementuje Runnable, jest wizualnym obiektem, który jest cały czas pokazywany.
edycja: czy poniższe rozwiązanie jest dobre? A może lepiej zastosować inną metodę (dotyczącą wydajności)?
private final Object standBy = new Object();
public void run() {
while(true) {
synchronized (standBy) {
while(ball != null) // should I use while or if here?
try{ standBy.wait() }
catch (InterruptedException ie) {}
}
if(ball != null) {
// do some Calculations
}
}
public void handleCollision(Ball b) {
// some more code..
ball = b;
synchronized (standBy) {
standBy.notify();
}
}
Użyj "BlockingQueue"; ta nieskończona pętla pochłonie cały czas procesora. – twentylemon
Nie ma okoliczności, w których ten wątek nie działa. To zawsze działa. –
Czy twój komputer ma zapasowy procesor? Jeśli masz wystarczającą liczbę procesorów, nieprzerwany wątek jest tani. Jeśli nie, to cię to kosztuje. –