Ho un filo che deve solo lavorare quando una certa circostanza viene in caso contrario esso diventa subito itera su un ciclo infinito vuoto:.Java prestazioni loop infinito
public void run() {
while(true) {
if(ball != null) {
// do some Calculations
}
}
}
influisce le prestazioni quando il loop realmente fa niente ma deve controllare se deve fare il calcolo ogni iterazione? Solo la creazione di questo thread quando necessario non è un'opzione per me, perché la mia classe che implementa Runnable è un oggetto visivo che è sempre mostrato.
modifica: la seguente è una buona soluzione? O è meglio usare un metodo diverso (relativo alle prestazioni)?
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();
}
}
Utilizzare un 'BlockingQueue'; questo ciclo infinito mangerà tutto il tempo della CPU. – twentylemon
Non c'è alcuna circostanza in cui questo thread non funzioni. Fa sempre del lavoro. –
Il computer dispone di un processore di riserva? Se disponi di processori sufficienti, un thread a esecuzione continua è economico. In caso contrario, ti costa. –