recurso em Java permite a execução simultânea de duas ou mais partes de um programa. Cada parte é um Thread. Esses fios geralmente precisam coordenar suas ações. Isso é feito usando alguns métodos finais, como Wait and Notify em Java. Este artigo ajudará você a entender esses métodos em detalhes.
Discutirei os tópicos na seguinte ordem:
- O que é sincronização de thread?
- O que são métodos Wait () e Notify ()?
- Por que e como usar Wait () e Notify () em Java?
- Exemplo
Vamos começar!
O que é sincronização de thread?
Programas multi-threaded podem regularmente apresentar uma situação em que vários tentativa de obter o mesmo recurso que produz resultados fraudulentos e surpreendentes. Às vezes, mais de um thread pode tentar acessar um recurso compartilhado, você precisa garantir que o recurso será usado por apenas um thread de cada vez. Isso pode ser feito usando Sincronização em Java.
Agora falando sobre Polling. A votação é um processo de testar uma condição repetidamente até que seja verdadeira. Este método é implementado com a ajuda de para verificar se uma determinada condição é verdadeira ou não. Você pode usar este método para threads, mas ele desperdiça muitos ciclos de CPU e também torna o processo de implementação muito ineficiente. Para evitar esses tipos de bugs, métodos como Wait e Notify em Java são introduzidos.
O que são métodos Wait () e Notify ()?
Para resolver o problema de multithreading, métodos como Wait e Notify em são usados. A classe Object usa esses três métodos finais que permitem que os threads se comuniquem sobre o status bloqueado de um recurso. Eles também são chamados de Blocos Protegidos.
tipo de dados data t sql
Esperar()
Este método faz com que a thread espere até que outra thread invoque os métodos notificar () e notificarAll () para este objeto. Este método Wait () diz ao encadeamento de chamada para liberar um bloqueio e ir dormir até que outro encadeamento entre no mesmo monitor e chame notificar (). Este método libera o bloqueio antes de esperar e readquire o bloqueio antes de retornar do método wait ().
O método Wait () está totalmente integrado ao bloqueio de sincronização. Isso é feito usando um recurso não disponível diretamente no mecanismo de sincronização.
Sintaxe:
synchronized (lockObject) {while (! condition) {lockObject.wait ()} // execute a ação aqui}
O segmento atual deve possuir o monitor do objeto. Ele deve ser chamado apenas a partir do método synchronized ou então lançará uma exceção.
Notificar ()
Este método é usado para notificar o que precisa para funcionar. Ele desperta um tópico que chamou de esperar() método no mesmo objeto.
Observe que ligar notificar () eventualmente não desiste de um bloqueio. Diz a um thread em espera que pode despertar. No entanto, o bloqueio não é realmente desistido até que o bloco sincronizado do notificador seja concluído. Agora diga, se você ligar notificar () em um recurso, mas o notificador ainda precisa realizar ações por 10 segundos dentro de seu bloco sincronizado, o encadeamento que estava esperando terá que esperar pelo menos mais 10 segundos adicionais para que o notificador libere o bloqueio no objeto, mesmo notificando () foi chamado.
Sintaxe:
synchronized (lockObject) {// activate_the_condition lockObject.notify () // qualquer código adicional se necessário}
NotifyAll ()
Este método é usado para despertar todos os threads que chamaram wait () no mesmo objeto. O encadeamento de maior prioridade será executado primeiro na maioria das situações, embora não seja garantido. Outras coisas são iguais ao método notificar ().
Por que e como usar Wait () e Notify () em Java?
Você deve usar Esperar e Notificar em porque eles estão relacionados ao bloqueio e o objeto tem um bloqueio. Mesmo que esperar e notificar em Java sejam um conceito bastante fundamental, eles são definidos no classe de objeto . Surpreendentemente, não é tão fácil escrever o código usando esperar e notificar. Você pode testar isso escrevendo código para resolver o problema produtor-consumidor usando esperar e notificar. Aqui, eu tenho um Fila edois tópicoschamado Produtor e Consumidor . Produtor thread coloca o número em uma fila compartilhada e Consumidor thread consome os números do balde compartilhado.
A condição é que, depois que um item é produzido, o encadeamento do consumidor deve ser notificado e, da mesma forma, depois que o encadeamento do produtor de consumo precisa ser notificado. Este inter-threadcomunicaçãoé obtido usando esperar e notificar em Java.
Nota : W.ait e nãométodos tify são definidos na classe de objeto, e devem ser chamados dentro do bloco sincronizado.
Exemplo
public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} class Thread2 extends Thread1 {int total @Override public void run () {synchronized (this) {for (int i = 0 i<=100 i++) { total += i } notify() }}}
Observe que no exemplo acima, um objeto de Thread2, isto é, b, está sincronizado. Este b completa o cálculo antes que o thread principal produza seu valor total.
Resultado:
Isso nos leva ao final deste artigo, onde aprendemos o no Wait and Notify em Java.Espero que o conteúdo mencionado acima tenha sido útil para melhorar o seu conhecimento. Continue lendo, continue explorando!
Verifique também pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso de certificação e treinamento Java J2EE e SOA da Edureka é projetado para estudantes e profissionais que desejam ser um desenvolvedor Java. O curso foi desenvolvido para lhe dar uma vantagem inicial na programação Java e treiná-lo para os conceitos básicos e avançados de Java, juntamente com vários como Hibernate e Spring.