Differenza Tra Dormire E Aspettare In Java

Sommario:

Differenza Tra Dormire E Aspettare In Java
Differenza Tra Dormire E Aspettare In Java

Video: Differenza Tra Dormire E Aspettare In Java

Video: Differenza Tra Dormire E Aspettare In Java
Video: Java Awaitility - No more Thread sleep! 2024, Novembre
Anonim

Differenza chiave: sleep vs wait in Java

Sospensione e attesa sono due metodi utilizzati per il multithreading in Java. Il metodo sleep appartiene alla classe Thread mentre il metodo wait proviene dalla classe Object. La differenza fondamentale tra sleep e wait in Java è che, lo sleep viene utilizzato per sospendere l'esecuzione del thread corrente per il numero specificato di millisecondi mentre il metodo wait viene utilizzato per far sì che il thread corrente attenda fino a quando un altro thread richiama la notifica o notifyAll metodo per l'oggetto.

Un thread è la più piccola unità di elaborazione nel sistema operativo. È un singolo flusso sequenziale di controllo all'interno di un programma. I fili sono leggeri. Il multithreading è il meccanismo di esecuzione di più thread contemporaneamente. I linguaggi di programmazione come Java supportano il multithreading. Il multithreading ha dei vantaggi perché consente di eseguire più thread contemporaneamente e i thread sono indipendenti l'uno dall'altro. Esistono metodi in Java che possono essere utilizzati per il multithreading. Due di loro dormono e aspettano.

CONTENUTI

1. Panoramica e differenza chiave

2. Che cos'è il sonno in Java

3. Che cos'è l'attesa in Java

4. Somiglianze tra il sonno e l'attesa in Java

5. Confronto affiancato - sonno vs attesa in Java in forma tabulare

6. Riepilogo

Cos'è il sonno in Java?

Ci sono più processi in esecuzione in un sistema operativo. Un processo è un programma in esecuzione. Ogni processo può avere più thread e tra questi thread si verifica un cambio di contesto. In Java, ci sono due modi per creare un thread. Ovvero estendendo la classe thread o implementando l'interfaccia Runnable. La classe Thread dispone di costruttori e metodi per creare ed eseguire operazioni su un thread. La classe Thread estende la classe Object e implementa l'interfaccia Runnable. L'interfaccia Runnable dovrebbe essere implementata da qualsiasi classe le cui istanze devono essere eseguite da un thread. Quando il thread viene eseguito, il codice che dovrebbe essere eseguito viene scritto all'interno del metodo run. Il thread che deve essere eseguito viene selezionato dallo scheduler del thread. Un solo thread viene eseguito in un singolo processo.

Un thread attraversa diverse fasi. Dopo aver creato un oggetto della classe Thread, il programmatore può richiamare il metodo di avvio. Prima di invocare quel metodo, si dice che il thread si trovi nel nuovo stato. Lo scheduler dei thread seleziona un thread da eseguire. Se il thread non è ancora selezionato dallo scheduler del thread ma se viene richiamato il metodo di avvio, il thread è in uno stato eseguibile. Dopo che lo scheduler del thread seleziona il thread da eseguire, passa allo stato di esecuzione. Se il thread è attivo ma non è attualmente idoneo per l'esecuzione, è in uno stato non eseguibile o bloccato. Dopo il completamento del metodo di esecuzione, il thread passa allo stato terminato. Queste sono le fasi principali del ciclo di vita del filo.

Sono disponibili vari metodi nella classe thread per eseguire diverse attività. Il metodo sleep viene utilizzato per sospendere il metodo per un determinato periodo di tempo. La sintassi per il metodo sleep è public void sleep (long milliseconds) genera InterructedException. Fa sì che il thread attualmente in esecuzione interrompa temporaneamente l'esecuzione per un numero specificato di millisecondi. Se un altro thread interrompe il thread corrente, lo stato interrotto del thread corrente viene cancellato quando viene generata questa eccezione.

Differenza tra dormire e aspettare in Java
Differenza tra dormire e aspettare in Java

Figura 01: programma Java con metodo sleep

Secondo il programma precedente, il metodo run contiene codice che dovrebbe essere eseguito. Nel programma principale vengono creati due oggetti di ExampleThread1 e su di essi vengono richiamati i metodi di avvio. Ciò consentirà di eseguire il codice all'interno del metodo run. Viene eseguito un solo thread alla volta. Con il filo. sonno (1000); consentirà al primo thread di terminare l'esecuzione per 1000 millisecondi. Quando un thread sta dormendo, lo scheduler del thread preleva l'altro thread.

Cos'è l'attesa in Java?

Più thread potrebbero accedere a una risorsa condivisa. Può causare la generazione di un output errato. La sincronizzazione dei thread può essere utilizzata per fare in modo che un solo thread acceda alla risorsa condivisa. Assumi una situazione come segue. Se sono presenti due thread come t1 e t2, t1 inizia a salvare i valori in un file di testo denominato Text1.txt. Questi valori verranno utilizzati per altri calcoli quando ritorna t1. Se t2 inizia prima che t1 ritorni, t2 può modificare i valori salvati da t1. Ciò può far sì che t1 fornisca un'uscita errata. Con l'aiuto della sincronizzazione, quando t1 inizia a utilizzare il file Text1.txt, quel file può essere bloccato, quindi è accessibile solo da t1. T2 non può cambiarlo fino a quando t1 non rilascia il blocco per accedere a quel file di testo. Quando l'attività è completata, t1 può rilasciare il blocco. Il blocco è anche noto come monitor.

La sincronizzazione dei thread può essere ottenuta tramite la comunicazione tra thread. Una sezione critica è un segmento di codice che accede alle risorse condivise. Nella comunicazione tra thread, un thread viene messo in pausa in esecuzione nella sua sezione critica e un altro thread può entrare nella stessa sezione critica per essere eseguito. È implementato utilizzando i metodi wait, notify e notifyAll. Appartengono alla classe Object. Il metodo wait viene utilizzato per consentire al thread corrente di rilasciare il blocco e attendere fino a quando un altro thread richiama il metodo notify o notifyAll per l'oggetto. Il metodo di notifica viene utilizzato per riattivare un singolo thread in attesa del blocco. NotificaAll attiva tutti i thread in attesa del blocco.

Differenza tra sleep e wait in Java Figura 02
Differenza tra sleep e wait in Java Figura 02

Figura 02: classe calcolatrice

Differenza chiave tra sonno e attesa in Java
Differenza chiave tra sonno e attesa in Java

Figura 03: metodo principale

La classe Calculator estende il Thread. Il blocco sincronizzato è all'interno del metodo run. Il ciclo for e il metodo di notifica si trovano all'interno del blocco sincronizzato. All'interno del metodo principale, un'istanza di un thread creata e il metodo di avvio viene chiamato su quell'istanza. Il metodo principale attenderà fino a quando il thread non darà una notifica. Durante l'esecuzione del programma, il metodo principale attende l'intera esecuzione del metodo di esecuzione e attende il metodo di notifica. Una volta chiamato il metodo di notifica, il metodo principale smette di attendere e inizia a eseguire il resto del codice. Main è in attesa del completamento del thread della calcolatrice. Infine, viene stampato il risultato della somma.

Se non è presente alcun blocco sincronizzato e se il metodo principale ha un codice come di seguito, restituirà l'output zero perché non è in attesa del completamento dell'altro thread.

Calcolatrice t1 = nuova calcolatrice ();

t1. inizio ();

System.out.println (t1.sum);

Qual è la somiglianza tra il sonno e l'attesa in Java?

Sia sleep che wait sono metodi che possono essere utilizzati durante l'implementazione del multithreading in Java

Qual è la differenza tra dormire e aspettare in Java?

Articolo diff. Al centro prima della tabella

sleep vs wait in Java

Il metodo sleep fa sì che il thread corrente sospenda l'esecuzione per il numero di millisecondi specificato, in base alla precisione e all'accuratezza dei timer e degli scheduler di sistema. Il metodo wait fa in modo che il thread corrente attenda finché un altro thread non richiama il metodo notify o notifyAll per l'oggetto.
Associazione con Lock
Il metodo sleep non rilascia il blocco su un oggetto durante la sincronizzazione. Il metodo wait rilascia il blocco durante la sincronizzazione.
Metodo di esecuzione
Il metodo sleep viene eseguito sul thread corrente. Il metodo wait viene chiamato sull'oggetto.
Classe associata
Lo sleep è un metodo della classe Thread. L'attesa è un metodo della classe Object.
Completamento
Il processo di sospensione viene completato al termine del periodo di tempo specificato. Il metodo wait viene interrotto chiamando i metodi notify o notifyAll.

Riepilogo: sleep vs wait in Java

Ci sono più processi in esecuzione sul sistema operativo. Ogni processo può avere più thread. Un thread è la più piccola unità di elaborazione in un sistema operativo. Il linguaggio di programmazione Java supporta il multithreading. Consente di eseguire più thread contemporaneamente. Il sonno e l'attesa sono due metodi che possono essere utilizzati durante l'implementazione del multi-threading. La differenza tra sleep e wait in Java è che lo sleep viene utilizzato per sospendere l'esecuzione del thread corrente per il numero specificato di millisecondi mentre il metodo wait viene utilizzato per far sì che il thread corrente attenda fino a quando un altro thread richiama la notifica o la notificaAll metodo per l'oggetto.

Raccomandato: