Aqui eu deixo um exemplo para o modelo usando um semáforo:
com a classe Hilo
declarada como classe interna não é necessária para explicar a referência a Tuberia
porque tem acesso a Os métodos da classe pai.
O contador está incluído em blocos curtos sincronizados para garantir que os eventos sejam impressos na sequência que ocorrem.
O semáforo no exemplo limita o Número de threads que têm acesso ao código entre acquire
e release
.
a principal diferença entre as duas implementações é que com o semáforo há um número de encadeamentos que podem acessar o código simultaneamente enquanto o método sincronizado garante que apenas um thread possa acessar este bloco de código, tornando-o uma ação atômica.
Se isso Nem um sentido não é visível em um exemplo básico, sem pensar que é realmente o trabalho que eles fazem os tópicos e quais recursos eles precisam para isso.
Experimente o comportamento, mude pausas na geração de novas fios, o número de fios, a quantidade de permissões ou tempo aleatório para a carga do código.