Raccomandato, 2024

Scelta Del Redattore

Differenza tra il metodo sleep () e wait () in Java

Il metodo sleep and wait sembra fare lo stesso compito, ma sono molto diversi tra loro. Il metodo Sleep appartiene alla classe Thread e il metodo wait appartiene alla classe Object. La differenza più importante che distingue entrambi è che il metodo sleep mantiene il blocco sull'oggetto finché non viene interrotto o termina la sua esecuzione. D'altra parte, il metodo wait rilascia il blocco sull'oggetto per consentire l'esecuzione degli altri oggetti fino a quando non viene ripristinato dal metodo di notifica. Ci sono alcune più differenze tra il metodo sleep e wait; puoi esplorarli nella tabella di confronto mostrata sotto.

Grafico comparativo

Base per il confrontodormireaspettare
Di baseIl metodo Sleep non rilascia il blocco su un oggetto finché non viene interrotto.Il metodo Wait rilascia il blocco sull'oggetto per consentire l'esecuzione di altri oggetti fino a quando non viene notificato il metodo notifyAll o notificato.
ClasseIl metodo Sleep è definito nella classe Thread.Il metodo Wait è definito nella classe Object.
sincronizzatoIl metodo Sleep non deve essere chiamato all'interno del contesto sincronizzato.Il metodo Wait deve essere chiamato all'interno del contesto Synchronized.
CompletamentoL'esecuzione del metodo di sospensione viene completata quando un thread lo interrompe o il tempo del metodo di sospensione è scaduto.L'esecuzione del metodo di attesa è completata quando il metodo notify () o notifyAll () lo interrompe.
StaticoIl metodo Sleep è un metodo statico.Il metodo Wait non è statico, ecco perché è necessario che l'oggetto lo invochi.
EsecuzioneIl metodo sleep viene eseguito sul thread corrente.Il metodo wait viene eseguito sull'oggetto.
EccezioneInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definizione del metodo del sonno

Il metodo sleep è il metodo statico della classe Thread . Il metodo sleep viene richiamato quando un thread non desidera eseguire alcuna attività per un determinato periodo di tempo. Il metodo sleep completa la sua esecuzione quando il tempo del metodo è scaduto, o viene interrotto da qualche altro thread nell'esecuzione. Una volta completato il metodo di sospensione, il thread ottiene nuovamente il suo stato eseguibile. Ci sono due dal metodo di sonno, come mostrato di seguito.

 sonno statico pubblico vuoto statico (lungo millisecondo); sonno statico pubblico vuoto (lunghi millisecondi e nanosecondi int); 

Nella suddetta forma, è possibile osservare che il tempo è menzionato sia nella forma del metodo di sonno. Questo perché un thread dorme sempre per un tempo particolare indicato nel parametro. Il metodo sleep può essere interrotto da qualsiasi altro thread durante la sua esecuzione; quindi, può lanciare InterruptedExecption. È necessario assicurarsi che l'eccezione sia gestita dal blocco try / catch o dalle parole chiave di Throws altrimenti, causerà l'errore di compilazione. Il metodo sleep mantiene il blocco sull'oggetto corrente nell'esecuzione e non consente l'esecuzione di nessun altro oggetto fino al termine dell'esecuzione.

Definizione del metodo Wait

Wait è il metodo definito nella classe Object . Il metodo wait viene utilizzato quando più attività (thread) stanno lottando per la stessa risorsa una alla volta. Il metodo wait quando invocato rilascia il lock sull'oggetto che ha invocato il metodo wait. E fornire una possibilità a un altro oggetto di essere eseguito fino a quando viene invocato un metodo di notifica che riprende ulteriormente il blocco sull'oggetto rilasciato dal metodo wait. Il metodo wait ha la seguente forma.

 aspettare(); attendere (lungo millisecondo); attendere (lungo millisecondo, nanosecondo int); 

Come nelle tre forme precedenti del metodo wait, il primo metodo non ha parametri time significa che l'esecuzione del metodo wait andrà avanti fino alla notifica, o il metodo notifyAll non viene invocato. Gli altri due metodi hanno parametri temporali. Quindi verranno eseguiti fino allo scadere del tempo o fino a quando non verrà notificato o il metodo noitfyAll verrà richiamato prima che scada il tempo. Il metodo wait può generare eccezioni. IllegalArgumentException, se l'argomento del tempo passato è negativo. IllegalMonitorStateException, se il thread corrente non sta utilizzando la risorsa. InterruptedException, se il metodo wait è interrotto.

Differenze chiave tra il metodo Sleep e Wait in Java

  1. Il punto principale che distingue il metodo sleep and wait è che il metodo sleep mantiene il blocco sull'oggetto finché non viene interrotto o il suo tempo scade. Tuttavia, il metodo wait rilascia il blocco sull'oggetto che lo richiama e offre ad altri oggetti la possibilità di eseguirlo.
  2. Il metodo sleep è definito nella classe Thread mentre il metodo wait è definito nella classe Object .
  3. Il metodo sleep non deve essere chiamato dal contesto sincronizzato. Ma il metodo di attesa deve essere chiamato da sincronizzato.
  4. Il metodo sleep viene risvegliato se il tempo del metodo è scaduto o interrotto dall'altro thread. Il metodo di attesa è risvegliato
    quando viene invocato il messaggio di notifica o notifica a tutti i metodi.
  5. Il metodo sleep è un metodo statico mentre, il metodo wait non è un metodo statico .
  6. Il metodo sleep viene eseguito sul thread corrente mentre il metodo wait viene eseguito sull'oggetto che lo richiama.
  7. L'eccezione generata dal metodo sleep è InterruptedException mentre le eccezioni thrwon by wait sono IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Conclusione:

Quando più thread desiderano utilizzare la stessa risorsa uno per uno, è necessario utilizzare il metodo wait. Quando un thread non vuole eseguire alcuna attività, è necessario utilizzare il metodo sleep.

Top