O que é semáforo
Se o contador for maior que zero, o fio terá acesso ao recurso compartilhado e o contador será decrementado por um, caso contrário, o tópico não receberá uma permissão e será suspenso. Quando a execução do tópico está concluída, o recurso não é mais necessário e o thread libera -o. O valor do contador aumentou por um depois que o recurso foi divulgado. Thread precisa obter permissão primeiro e precisa esperar antes que os recursos sejam adquiridos. O tópico não poderá compartilhar nenhum recurso se um contador atingir zero:
Agora, o código completo de execução dos threads é mencionado abaixo:
importar java.util.simultâneo.*;Agora, no código acima, definimos três classes diferentes que são 'Semphoreclient', 'SharedResource', e 'Semaforethread'. No SemaforClient, inicializamos dois threads com uma permissão. O encadeamento T1 aumentará o contador quando executado enquanto o encadeamento T2 o diminuirá. A classe SharedResource é de onde os tópicos compartilharão o acesso. Na aula de Semaforethread, iniciamos o processo de bloqueio para ambos os threads T1 e T2, o que significa que, se algum dos dois threads bloquear o processo e começar a executar, o outro terá que esperar até que a fechadura seja liberada. Agora, antes de executar o código, você precisa ter certeza de que instalou o aplicativo Java Development Kit (JDK) em seu sistema operacional Linux usando o comando abaixo no terminal
$ sudo apt install default-jdkAgora, após sua verificação, você pode abrir qualquer editor e depois escrever e salvar o código Java dentro dele, como mostrado abaixo.
$ nano Semaforclient.JavaO código que escrevemos dentro do 'Semaforclient.Java' O arquivo é mostrado abaixo.
Você pode ver a saída do código, como mostrado abaixo
A saída mostra que existem dois threads; Na primeira imagem, o thread T1 foi executado e, depois que o T1 libera a licença, o thread T2 começa a executar; Na segunda imagem, o thread T2 foi executado primeiro, seguido pelo thread t1. Isso implica que qualquer tópico teve a oportunidade primeiro bloqueará o processo, exigindo que o outro tópico espere.
Conclusão
Um semáforo é um objeto Java usado para controlar o acesso a um recurso compartilhado e é um método de sincronização de threads que permite enviar sinais nos threads para gerenciar várias tarefas ao mesmo tempo. Ele concede acesso ao recurso compartilhado e, como resultado, um tópico deve primeiro obter permissão do semáforo antes de usar os recursos. Neste artigo, criamos dois threads A e B com uma licença. Portanto, qualquer um desses dois tópicos começará a executar e bloquear o processo, então o outro tópico precisa esperar até que o processo seja liberado.