In quale oggetto devo implementare wait () / notify ()?

0

Sto lavorando a un progetto Android con multithreading. Fondamentalmente devo aspettare che il server risponda prima di inviare più dati.

L'attività di invio dei dati è delimitata dal flag boolean hasServerResponded in modo che Thread esegua il loop infinitamente senza fare nulla finché il flag non diventa true .

Poiché questo boolean non è dichiarato come volatile (ancora), e anche il looping senza fare nulla spreca risorse, ho pensato che forse dovrei usare AtomicBoolean e anche implementare il meccanismo wait() / notify() .

Devo utilizzare i metodi AtomicBoolean object notify() e wait() o dovrei creare un blocco Object ?

    
posta Christopher Francisco 07.06.2014 - 15:32
fonte

3 risposte

2

Se non si sta ancora utilizzando il volatile e si ottengono funzioni atomiche è OK utilizzare AtomicBoolean. E se usi AtomicBoolean, è meglio usare i suoi metodi e potrebbe darti qualche vantaggio in termini di prestazioni.

    
risposta data 08.06.2014 - 11:07
fonte
2

IMO, lavorare con attesa / notifica di basso livello è soggetto a bug e di solito è una pessima idea. Java ha meravigliosi costrutti di concorrenza di livello superiore. In questo esempio, usa una coda.

    
risposta data 08.06.2014 - 03:33
fonte
0

il modo tipico per implementare questo è:

void waitForResponce() throws InterruptedException{
    synchronized(this){
        while(!responded)wait();
    }
}

private boolean responded=false;

void signalResponce(){
    synchronized(this){
        responded=true;
    }
}

il ciclo while è quello di proteggersi da wakeups spurie e surround sincronizzati nel mentre per proteggersi dalle condizioni di gara

se tu che permetti il ripristino del segnale diventa più difficile

tuttavia in Android esiste un ciclo di eventi e attività asincrone che puoi sfruttare quale richiamo alla compilazione del thread ui

    
risposta data 07.06.2014 - 18:29
fonte

Leggi altre domande sui tag