Rosca Java básico de comunicação e perguntas da entrevista relevantes

A colaboração entre o fio realmente necessário, por exemplo, o mais clássico produtor - modelo de consumo: Quando a fila está cheia, o produtor tem que esperar para a fila espaço para continuar a conduzir em mercadoria, e durante um período de espera, os produtores devem libertar a posse de recursos críticos (por exemplo, filas) de. Porque se você não liberar o produtor o direito de aceder a recursos críticos, então o consumidor não pode fila de bens de consumo, não vai deixar o espaço fila, então os produtores teria sido espera indefinidamente. Por conseguinte, em circunstâncias normais, quando a fila está cheia, o produtor irá entregar posse de quaisquer recursos críticos, e entrar num estado suspenso. Então espere para a despesa de bens de consumo, consumidor e produtor notificar o espaço fila. Da mesma forma, quando a fila está vazia, os consumidores devem esperar, esperar por ele para informar o produtor da commodity na fila. Este processo de comunicar uns com os outros é uma colaboração entre os fios.
  Java As duas formas mais comuns de comunicação rosca cooperando:
  classe Object esperar um fio de bloqueio .syncrhoized () / o Notificar () / notifyAll ()
  o aguardam para a condição Condition Classe II .ReentrantLock fio de bloqueio de classe () / sinal () / signalAll ()
  troca directa de dados entre as threads:
  três a comunicação entre os segmentos através de linha: 1) fluxo de bytes; 2) o fluxo de caracteres

classe de objecto ①syncrhoized espera rosca bloqueado () / notificar () / notifyAll
() comunicação rosca e notificar os métodos descritos -wait:
. Java.lang.Object classe classe proporciona um método para o funcionamento de dois tipos de comunicação rosca
Espere () : segmento de execução para o método de liberação de bloqueio de sincronização, linha JVM para a loja que esperar para a piscina, à espera de outros tópicos acordar o segmento.
a Notificar: o método de threads de execução na esteira qualquer tópico à espera de uma piscina esperando para transformar fio para bloquear a piscina para esperar.
notifyAll (): acordar um segmento para executar o método em todos os segmentos de espera para a piscina esperando para travar o pool de threads que esperar.

Nota: o método acima só pode ser invocada para monitorar o objeto de bloqueio de sincronização, ou então erro IllegalMonitorStateException ...

Suponha segmento A e segmento B operam em conjunto um objecto X (genlock), A, B rosca pode comunicar através de espera e notificar Método X processo objecto é como se segue:
1: Quando a sincronização método Um segmento de execução objetos X, e A fio mantém o bloqueio objeto X, linha B não tem a oportunidade de realizar, linha B espera na piscina objetos de bloqueio X.
2: método um método de sincronização execução de thread x.wait (), um segmento libera o bloqueio objeto X, uma entra no segmento de espera piscina objecto X.
3: adquirir o bloqueio objecto X segmento B aguardando o bloqueio na fechadura do objecto na piscina de X, X um outro método de sincronização é executada
4:. B método de sincronização rosca realizada em X. quando o método () notificar, a JVM um segmento se move da espera conjunto de objetos de X a X objeto pool de bloqueio, esperando para adquirir um bloqueio.
5: sincronização método B executando o fio, o fio adquire o bloqueio para libertar o bloqueio .A, o método continua com sincronização .

Nota:
(1) bloqueio de sincronização piscina:
bloqueio de sincronização deve selecionar vários segmentos objeto de recurso compartilhado.
O produtor atual no momento dos dados de produção (primeiro tem genlock), outros segmentos de espera para adquirir o bloqueio na piscina de bloqueio.
Quando a execução do thread acabar blocos de código de sincronização e eles vão liberar o bloqueio de sincronização, outros segmentos começam a agarrar o direito de usar o bloqueio.

(2) Apenas vários segmentos usando o mesmo objeto quando vários segmentos são mutuamente exclusivas ter efeito.
Costumávamos fazer este objeto mutex chamado monitor de síncrona bloqueio objeto / sincronização.
A sincronização pode bloquear objeto selecionar qualquer tipo de objeto pode ser, apenas se certificar de que vários segmentos usando o mesmo objeto de bloqueio pode ser.
porque só monitor de sincronização bloqueio objeto antes de chamar a espera e notificar métodos, portanto, espera e notificar métodos deve existir na classe Object, em vez da classe fio.
Aqui Insert Picture Descrição
Aqui Insert Picture Descrição
o aguardam para a condição condição fio de bloqueio classe classe ②ReentrantLock () / sinal () / signalAll ()

Condição só se apareceu em java 1.5, que é usado para substituir espera tradicional do Object (), notify () para conseguir a cooperação entre os fios, em comparação com o uso de espera Object (), notify (), usando Condition1 o await () , sinal () nesta forma de realização da cooperação entre as roscas mais seguras e eficientes. Portanto, é bastante geralmente recomendado Condição, bloqueando fila em um blog que lhe diz para, de fato bloquear fila é usado para simular Condição colaboração entre threads.

Condição é a interface, a abordagem básica é a await () e o método de sinal ();
condição de bloqueio dependente da interface, gerar um substancialmente códigos de condição são lock.newCondition ()
chama o aguardam de condição () e signal () método, você tem que ser a protecção de bloqueio, que pode ser usado entre Lock.lock () e lock.unlock
  Conditon no await () correspondente para o objecto de espera ();
  para a condição condição do sinal () correspondente para notificar o objecto ();
  para a condição condição o signalAll () correspondente para o objecto notifyAll ().

Aqui Insert Picture Descrição
As perguntas da entrevista:
? (. 1) SLEEP ea diferença de espera
A: sono é um método de classe Thread, classe método espera objeto definido em
uma ou outra maneira estática sleep (), ele não pode mudar a fechadura máquina objeto, quando um bloco sincronizado chamar o método sleep (), embora o fio vai para dormir, mas o objeto de bloqueio da máquina não foi divulgado, os outros segmentos ainda são incapazes de acessar o objeto.
esperar método () da classe Object, quando um segmento é executado esperar método, e procede a uma piscina de espera associado com o objeto, o objeto ao liberar o bloqueio da máquina, para que outros segmentos podem acessar, pode notificar, notifyAll método acordar segmentos de espera

(2) Qual é o modelo de produtor e consumidor?
modelo de produtor-consumidor é fortemente acoplado a resolver o problema dos produtores e consumidores através de uma fila de bloqueio. Produtores e consumidores não se comunicam diretamente uns com os outros,
e para comunicar através do bloqueio de fila, para produtores após a conclusão do processamento de dados de produção sem ter que esperar para o consumidor, lance direta fila de bloqueio, os consumidores não encontrar um produtor de dados, mas feita directamente a partir de bloquear a fila,
bloqueando fila é equivalente a um tampão para equilibrar os produtores e consumidores de energia de processamento.

Publicado 99 artigos originais · ganhou elogios 2 · Vistas 2615

Acho que você gosta

Origin blog.csdn.net/weixin_41588751/article/details/105228237
Recomendado
Clasificación