Differenza tra il sonno e l'attesa in Java

Sommario:

Differenza tra il sonno e l'attesa in Java
Differenza tra il sonno e l'attesa in Java

Video: Differenza tra il sonno e l'attesa in Java

Video: Differenza tra il sonno e l'attesa in Java
Video: JAVA: le classi astratte. Cosa sono e come utilizzarle nei programmi 2024, Luglio
Anonim

Differenza chiave: dormi e aspetta in Java

Sleep e wait sono due metodi utilizzati per il multithreading in Java. Il metodo sleep appartiene alla classe Thread mentre il metodo wait proviene dalla classe Object. Il differenza fondamentale tra sleep e wait in Java è quello, 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 non invoca la notifica o metodo notificationAll 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 per eseguire più thread contemporaneamente. I linguaggi di programmazione come Java supportano il multithreading. Il multithreading presenta vantaggi perché consente di eseguire più thread contemporaneamente e i thread sono indipendenti l'uno dall' altro. Ci sono metodi in Java che possono essere usati per il multithreading. Due di loro stanno dormendo e aspettano.

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 si verifica un cambio di contesto tra questi thread. In Java, ci sono due modi per creare un thread. Cioè 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 dovrebbe essere eseguito viene scritto all'interno del metodo run. Il thread che deve essere eseguito viene selezionato dall'utilità di pianificazione dei 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ò invocare il metodo start. Prima di invocare quel metodo, si dice che il thread si trova nel nuovo stato. L'utilità di pianificazione dei thread seleziona un thread da eseguire. Se il thread non è ancora selezionato dall'utilità di pianificazione del thread ma se viene richiamato il metodo start, il thread è in uno stato eseguibile. Dopo che l'utilità di pianificazione del thread ha selezionato 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 run, il thread passa allo stato terminato. Queste sono le fasi principali del ciclo di vita del filo.

Ci sono vari metodi disponibili nella classe thread per eseguire diversi compiti. Il metodo di sospensione viene utilizzato per sospendere il metodo per un periodo di tempo specifico. La sintassi per il metodo sleep è public void sleep (millisecondi lunghi) genera InterruptedException. 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 il sonno e l'attesa in Java
Differenza tra il sonno e l'attesa in Java

Figura 01: Programma Java con metodo sleep

Secondo il programma sopra, il metodo run contiene codice che dovrebbe essere eseguito. Nel programma principale vengono creati due oggetti di ExampleThread1 e su di essi 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 è inattivo, lo scheduler dei thread riprende 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. Assumere una situazione come segue. Se ci sono due thread come t1 e t2, t1 inizia a salvare i valori in un file di testo chiamato Text1.txt. Questi valori verranno utilizzati per qualche altro calcolo quando t1 ritorna. Se t2 inizia prima del ritorno di t1, t2 può modificare i valori salvati da t1. Ciò può far sì 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 finché t1 non rilascia il blocco per accedere a quel file di testo. Quando l'attività è completata, il 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 sospeso in esecuzione nella sua sezione critica e un altro thread può entrare nella stessa sezione critica per essere eseguito. Viene implementato utilizzando i metodi wait, notifica e notificationAll. Appartengono alla classe Object. Il metodo wait viene utilizzato per consentire al thread corrente di rilasciare il blocco e attendere che un altro thread richiami il metodo notification o notificationAll per l'oggetto. Il metodo di notifica viene utilizzato per riattivare un singolo thread in attesa del blocco. NotificationAll riattiva tutti i thread in attesa del blocco.

Differenza tra sleep e wait in Java_Figure 02
Differenza tra sleep e wait in Java_Figure 02

Figura 02: Classe calcolatrice

Differenza chiave tra il sonno e l'attesa in Java
Differenza chiave tra il sonno e l'attesa in Java

Figura 03: Metodo principale

La classe Calcolatrice estende il Thread. Il blocco sincronizzato si trova all'interno del metodo run. Il metodo for loop e notifica si trova all'interno del blocco sincronizzato. All'interno del metodo principale, un'istanza di un thread creata e il metodo start 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 main attende l'intera esecuzione del metodo run 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 fino al completamento del thread della calcolatrice. Infine, viene stampato il risultato della somma.

Se non c'è un blocco sincronizzato e se il metodo principale ha un codice come di seguito, darà l'output come zero perché non sta aspettando il 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 quando si implementa il multithreading in Java

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

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 sì che il thread corrente attenda fino a quando un altro thread non invoca il metodo notification o notificationAll per l'oggetto.
Associazione con Lock
Il metodo di sospensione non rilascia il blocco su un oggetto durante la sincronizzazione. Il metodo di attesa rilascia il blocco durante la sincronizzazione.
Metodo di esecuzione
Il metodo di sospensione 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 di classe Object.
Completamento
Il processo di sospensione è completato al termine del periodo di tempo specificato. Il metodo wait viene interrotto chiamando i metodi notification o notificationAll.

Riepilogo – dormi e aspetta 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. Sleep e wait sono due metodi che possono essere utilizzati quando si implementa il 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 di millisecondi specificato mentre il metodo wait viene utilizzato per far sì che il thread corrente attenda fino a quando un altro thread non invoca la notifica o la notifica metodo per l'oggetto.

Consigliato: