Cos'è il semaforo
Se il contatore è maggiore di zero, il thread viene concesso l'accesso alla risorsa condivisa e il contatore viene decrementato da uno, altrimenti il thread non riceverà un permesso e verrà sospeso. Quando l'esecuzione del thread è completa, la risorsa non è più richiesta e il thread la rilascia. Il valore contatore è aumentato di uno una volta che la risorsa è stata rilasciata. Il thread deve prima ottenere l'autorizzazione e deve attendere prima che le risorse vengano acquisite. Il thread non sarà in grado di condividere alcuna risorsa se un contatore raggiunge zero:
Ora è menzionato il codice completo di esecuzione dei thread:
Importa Java.util.simultaneo.*;Ora nel codice sopra, abbiamo definito tre diverse classi che sono 'Semforeclient', 'SharedResource', E 'SemaforeThread'. In semaforeclient abbiamo inizializzato due thread con un permesso. Thread t1 increscerà il contatore quando eseguito mentre il thread t2 lo diminuirà. La classe SharedResource è da dove i thread condivideranno l'accesso. Nella classe semaforeThread, abbiamo avviato il processo di blocco per entrambi i thread T1 e T2, il che significa che se una delle due thread bloccano il processo e inizia a eseguire, l'altro deve aspettare fino a quando il blocco non è stato rilasciato. Ora prima di eseguire il codice, è necessario assicurarsi prima di aver installato l'applicazione Java Development Kit (JDK) nel sistema operativo Linux utilizzando il comando di seguito nel terminale
$ sudo apt installare default-jdkOra dopo la sua verifica, puoi aprire qualsiasi editor, quindi scrivere e salvare il codice Java al suo interno come mostrato di seguito.
$ nano semaforeclient.GiavaIl codice che abbiamo scritto all'interno del 'Semaforeclient.Giava' Il file è mostrato di seguito.
Puoi vedere l'output del codice come mostrato di seguito
L'output mostra che ci sono due thread; Nella prima immagine, il thread T1 è stato eseguito, quindi una volta che T1 rilascia il permesso, il thread T2 inizia a eseguire; Nella seconda immagine, il thread T2 è stato eseguito per primo, seguito dal thread T1. Ciò implica che qualunque thread abbia avuto l'opportunità per prima bloccerà il processo, richiedendo all'altro thread di aspettare.
Conclusione
Un semaforo è un oggetto Java che viene utilizzato per controllare l'accesso a una risorsa condivisa ed è un metodo di sincronizzazione del thread che consente di inviare segnali su thread per gestire diverse attività contemporaneamente. Concede l'accesso alla risorsa condivisa e, di conseguenza, un thread deve prima ottenere l'autorizzazione dal semaforo prima di utilizzare le risorse. In questo articolo, abbiamo creato due thread A e B con un permesso. Quindi uno di questi due thread inizierà a eseguire e bloccare il processo, quindi l'altro thread deve attendere fino al rilascio del processo.