java atingir três métodos de produtores e consumidores

Quando o design e implementação do modelo, é preciso prestar atenção às três perguntas seguintes:

Quando a sincronização do recipiente e adicione o produto para levar o produto, ou seja, a qualquer momento, acrescentando tomadas são mutuamente exclusivas, e cada vez que surge é mutuamente operações exclusivas (operação de adição também é verdade).

Método 1:
Use wait () e notificar (), quando o recipiente está cheio, os produtores precisam produção temporariamente parada até que o recipiente não estiver cheia, quando o recipiente está vazio, o consumidor precisa gastar temporariamente parada até que o recipiente não estiver vazia, um buffer depois de esperar para as chamadas cheios e vazios do método wait (), até que os produtores a produzir um produto ou um produto que os gastos dos consumidores vai acordar todas as threads.

Método 2:
o Await () e método de sinal (), ou seja, modo de bloqueio de rosca.
reentrante bloqueio pode ser realizado (de ReentrantLock) um.
fechaduras de reentrada, também conhecido como bloqueio recursiva, depois de se referir ao mesmo segmento para adquirir a função de bloqueio da camada externa, a camada interior ainda função recursiva para adquirir o código de bloqueio, mas não é afectada.
Em termos simples, o bloqueio manter esta relacionada com contador de bloqueio de acesso, se o bloqueio tem sido um bloqueio de segmento novamente, o contador de aquisição é incrementado, o fim do contador chamada de função é reduzido em 1, e depois duas vezes às necessidades de bloqueio para ser lançado obter um lançamento real.
Já adquiriu um fio de bloqueio para o outro bloco sincronizado exige o mesmo bloqueio não será bloqueado.

Método 3:
para alcançar fila de bloqueio (BlockingQueue) um.
A condição principal é bloqueado dois critérios seguintes:
1. Quando a fila está cheio quando realizado em filas
2. Quando o tempo de fila para uma fila vazia operação

Quando uma linha completa de bloqueio é a operação de enfileiramento fila será bloqueado, a menos que haja outra discussão foi uma operação de equipa, quando um fio é bloqueado em uma operação fila Desenfileiramento vazia será bloqueado, a menos que de outra maneira uma linha para a equipe operacional. Portanto, o bloqueio da fila é thread-safe.

Publicado 53 artigos originais · ganhou elogios 5 · Visualizações 435

Acho que você gosta

Origin blog.csdn.net/qq_45287265/article/details/104991518
Recomendado
Clasificación