Grafico comparativo
Base per il confronto | dormire | aspettare |
---|---|---|
Di base | Il 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. |
Classe | Il metodo Sleep è definito nella classe Thread. | Il metodo Wait è definito nella classe Object. |
sincronizzato | Il metodo Sleep non deve essere chiamato all'interno del contesto sincronizzato. | Il metodo Wait deve essere chiamato all'interno del contesto Synchronized. |
Completamento | L'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. |
Statico | Il metodo Sleep è un metodo statico. | Il metodo Wait non è statico, ecco perché è necessario che l'oggetto lo invochi. |
Esecuzione | Il metodo sleep viene eseguito sul thread corrente. | Il metodo wait viene eseguito sull'oggetto. |
Eccezione | InterruptedException | IllegalArgumentException, 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
- 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.
- Il metodo sleep è definito nella classe Thread mentre il metodo wait è definito nella classe Object .
- Il metodo sleep non deve essere chiamato dal contesto sincronizzato. Ma il metodo di attesa deve essere chiamato da sincronizzato.
- 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. - Il metodo sleep è un metodo statico mentre, il metodo wait non è un metodo statico .
- Il metodo sleep viene eseguito sul thread corrente mentre il metodo wait viene eseguito sull'oggetto che lo richiama.
- 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.