Differenza tra il sonno e l'attesa in Java

Differenza chiave - sleep vs wait in Giava
 

Sleep e wait sono due metodi utilizzati per il multithreading in Java. Il metodo sleep appartiene alla classe Thread mentre il metodo wait è dalla classe Object. Il differenza fondamentale tra il sonno e l'attesa in Java è quello, il sleep viene utilizzato per sospendere l'esecuzione del thread corrente per il numero specificato di millisecondi mentre il metodo wait viene utilizzato per far attendere il thread corrente fino a quando un altro thread richiama il metodo notify o notifyAll 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 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.

CONTENUTO

1. Panoramica e differenza chiave
2. Cos'è il sonno in Java
3. Cosa è l'attesa in Java
4. Somiglianze tra il sonno e l'attesa in Java
5. Confronto fianco a fianco - sleep vs wait in Java in forma tabulare
6. Sommario

Cos'è il sonno in Java?

Esistono più processi in esecuzione in un sistema operativo. Un processo è un programma in esecuzione. Ogni processo può avere più thread e si verifica un cambio di contesto tra questi thread. In Java, ci sono due modi per creare un thread. Ovvero estendendo la classe thread o implementando l'interfaccia Runnable. La classe Thread ha 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 deve essere eseguito viene scritto all'interno del metodo run. Il thread che deve essere eseguito viene selezionato dallo scheduler dei thread. Solo un thread viene eseguito in un singolo processo.

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

Esistono vari metodi disponibili nella classe thread per eseguire compiti diversi. 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 InterruptedException. Fa in modo che il thread attualmente in esecuzione interrompa temporaneamente l'esecuzione per un determinato numero di millisecondi. Se un altro thread interrompe il thread corrente, lo stato interrotto del thread corrente viene cancellato quando viene generata questa eccezione.

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 vengono invocati 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. dormire (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.

Cosa è l'attesa in Java?

Più thread possono accedere a una risorsa condivisa. Può causare generare un output errato. La sincronizzazione dei thread può essere utilizzata per creare un solo thread per accedere alla risorsa condivisa. Assumi una situazione come segue. Se, ci sono due thread come t1 e t2, t1 inizia a salvare valori in un file di testo chiamato Text1.txt. Questi valori saranno usati per qualche altro calcolo quando t1 ritorna. Se t2 inizia prima che t1 ritorni, t2 può cambiare i valori salvati da t1. Ciò può causare che t1 fornisca un output errato. Con l'aiuto della sincronizzazione, quando t1 inizia a utilizzare il file Text1.txt, quel file può essere bloccato, quindi è accessibile solo da t1. Il 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 del filo può essere ottenuta tramite comunicazione inter-thread. Una sezione critica è un segmento di codice che accede alle risorse condivise. Nella comunicazione tra thread, un thread viene messo in pausa nell'esecuzione nella sua sezione critica e un altro thread può entrare nella stessa sezione critica da eseguire. È implementato usando 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 attivare un singolo thread in attesa del blocco. NotifyAll si attiva tutti i thread in attesa sul blocco.

Figura 02: classe calcolatrice

Figura 03: Metodo principale

La classe Calculator estende la discussione. Il blocco sincronizzato si trova nel metodo di esecuzione. Il ciclo for e il metodo di notifica si trovano all'interno del blocco sincronizzato. All'interno del metodo principale, viene creata un'istanza di un thread e viene richiamato il metodo di avvio su quell'istanza. Il metodo principale attenderà che il thread fornisca 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 aspettare e inizia a eseguire il resto del codice. Main sta aspettando che il thread del Calcolatore sia completato. Alla fine, viene stampato il risultato della somma.

Se non c'è un blocco sincronizzato e se il metodo principale ha un codice come sotto, darà l'output come zero perché non aspetta che l'altro thread si completi.

Calcolatrice t1 = new Calculator ();

 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 quando si implementa il multithreading in Java

Qual è la differenza tra dormire e aspettare in Java?

dormire vs aspettare in Java

Il metodo di sospensione sospende l'esecuzione del thread corrente per il numero specificato di millisecondi, in base alla precisione e all'accuratezza dei timer di sistema e degli scheduler. Il metodo wait fa in modo che il thread corrente attenda fino a quando un altro thread 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
Il sonno è un metodo di classe Thread. L'attesa è un metodo di 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.

Sommario - dormire vs aspettare dentro Giava

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. Permette di eseguire più thread contemporaneamente. Il sonno e l'attesa sono due metodi che possono essere utilizzati quando si implementa il multi-threading. La differenza tra sleep e wait in Java è che, sleep viene utilizzato per sospendere l'esecuzione del thread corrente per il numero specificato di millisecondi mentre il metodo wait viene utilizzato per far attendere il thread corrente fino a quando un altro thread richiama la notifica o notifyAll metodo per l'oggetto.

Riferimento:

1. "Inter-Thread Communication in Java - Javatpoint".. JavaTPoint. Disponibile qui
2. Inter Thread Comunicazione in multithreading Java | Core Java Tutorial | Studytonight. Disponibile qui