SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
72 Curso de Java
Threads:
notify, wait e
notifyAll
• Uma thread A está sendo executada dentro de um
método sincronizado e precisa de acesso a um
recurso R que no momento está indisponível
• Uma thread A está sendo executada dentro de um
método sincronizado e precisa de acesso a um
recurso R que no momento está indisponível
• Se a thread A ficar esperando por R, irá bloquear o
objeto impedindo que outras threads acessem o
mesmo
• Uma thread A está sendo executada dentro de um
método sincronizado e precisa de acesso a um
recurso R que no momento está indisponível
• Se a thread A ficar esperando por R, irá bloquear o
objeto impedindo que outras threads acessem o
mesmo
• Nesse caso a melhor solução para não causar
problemas é liberar temporariamente o controle do
objeto permitindo que outra thread seja executada
• wait: bloqueia a execução da thread
temporariamente, ou seja, coloca a thread em modo
de espera
• wait: bloqueia a execução da thread
temporariamente, ou seja, coloca a thread em modo
de espera
• a thread fica em modo de espera até que seja
notificada
• wait: bloqueia a execução da thread
temporariamente, ou seja, coloca a thread em modo
de espera
• a thread fica em modo de espera até que seja
notificada
• notify: notifica uma thread the estava esperando, ou
seja, retorna a execução da thread
• wait: bloqueia a execução da thread
temporariamente, ou seja, coloca a thread em modo
de espera
• a thread fica em modo de espera até que seja
notificada
• notify: notifica uma thread the estava esperando, ou
seja, retorna a execução da thread
• notifyAll: notice todas as threads, e a que tem
prioridade mais alta ganha acesso ao objeto
public class TiqueTaque {
boolean tique;
synchronized void tique(boolean estaExecutando){
if (!estaExecutando){
tique = true;
notify(); //notifica qualquer thread the estiver esperando
return;
}
System.out.print("Tique ");
tique = true;
notify();
try {
while (tique){
wait(); //espera toque terminar a execução
}
} catch(InterruptedException e){
System.out.println("Thread foi interrompida");
}
}
}
synchronized void taque(boolean estaExecutando){
if (!estaExecutando){
tique = false;
notify(); //notifica qualquer thread the estiver esperando
return;
}
System.out.println("Taque");
tique = false;
notify();
try {
while (!tique){
wait(); //espera tique terminar a execução
}
} catch(InterruptedException e){
System.out.println("Thread foi interrompida");
}
}
public class ThreadTiqueTaque implements Runnable {
Thread thread;
TiqueTaque tt;
final int QTD = 5;
public ThreadTiqueTaque(String nome, TiqueTaque tt) {
thread = new Thread(this, nome);
this.tt = tt;
thread.start();
}
@Override
public void run(){
if (thread.getName().equalsIgnoreCase("Tique")){
for (int i=0; i<QTD; i++){
tt.tique(true);
}
tt.tique(false);
} else {
for (int i=0; i<QTD; i++){
tt.taque(true);
}
tt.taque(false);
}
}
}
public static void main(String[] args) {
TiqueTaque tt = new TiqueTaque();
ThreadTiqueTaque tique = new ThreadTiqueTaque("Tique", tt);
ThreadTiqueTaque taque = new ThreadTiqueTaque("Taque", tt);
try {
tique.thread.join();
taque.thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
• Experimente remover os códigos de wait e notify
• Irá notar que os métodos param de trabalhar em
conjunto
https://github.com/loiane/curso-java-basico
Código Fonte:
Não conhece Git/Github?
http://www.loiane.com/2013/11/
screencast-git-e-github-para-iniciantes
http://loiane.training
Fórum para dúvidas + certificado do curso.
Cadastro em:
Obrigada!
http://loiane.com
facebook.com/loianegroner
twitter.com/loiane
https://github.com/loiane
youtube.com/loianegroner
http://loiane.training

Mais conteúdo relacionado

Mais procurados

Mais procurados (14)

Deadlocks (Resumo)
Deadlocks (Resumo)Deadlocks (Resumo)
Deadlocks (Resumo)
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVA
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12
 
Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScript
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Síncrono vs Assíncrono
Síncrono vs AssíncronoSíncrono vs Assíncrono
Síncrono vs Assíncrono
 
Parte1f
Parte1fParte1f
Parte1f
 
Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 
(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06
 

Destaque

[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object
[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object
[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe ObjectLoiane Groner
 
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referenciaLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...Loiane Groner
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: VarargsLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simplesLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave finalLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e importLoiane Groner
 
[Curso Java Basico] Aula 59: Importacao estatica (static import)
[Curso Java Basico] Aula 59: Importacao estatica (static import)[Curso Java Basico] Aula 59: Importacao estatica (static import)
[Curso Java Basico] Aula 59: Importacao estatica (static import)Loiane Groner
 
[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratosLoiane Groner
 
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no JavaLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca [Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem umLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...Loiane Groner
 
[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printfLoiane Groner
 
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratasLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e PolimorfismoLoiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...Loiane Groner
 

Destaque (20)

[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object
[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object
[Curso Java Basico - Orientacao a Objetos] Aula 43: Classe Object
 
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
 
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...
[Curso Java Basico - Orientacao a Objetos] Aula 39: Heranca: modificadores de...
 
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...
[Curso Java Basico - Orientacao a Objetos] Aula 40: Heranca e Polimorfismo: s...
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
 
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final
[Curso Java Basico - Orientacao a Objetos] Aula 42: Palavra chave final
 
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import
[Curso Java Basico - Orientacao a Objetos] Aula 28: Pacotes (packages) e import
 
[Curso Java Basico] Aula 59: Importacao estatica (static import)
[Curso Java Basico] Aula 59: Importacao estatica (static import)[Curso Java Basico] Aula 59: Importacao estatica (static import)
[Curso Java Basico] Aula 59: Importacao estatica (static import)
 
[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos
 
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java
[Curso Java Basico - Exceptions] Aula 51: tipos de erros no Java
 
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca [Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca
[Curso Java Basico - Orientacao a Objetos] Aula 46: Interface e heranca
 
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um
[Curso Java Basico - Orientacao a Objetos] Aula 36: Relacionamento tem um
 
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
 
[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf
 
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)
Curso Java Basico] Aula 66: Garbage Collector (Coletor de Lixo)
 
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas
[Curso Java Basico - Orientacao a Objetos] Aula 41: Heranca: classes abstratas
 
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo
[Curso Java Basico - Orientacao a Objetos] Aula 45: Interfaces e Polimorfismo
 
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
 

[Curso Java Basico] Aula 72: Threads: notify, wait e notifyAll

  • 1. 72 Curso de Java Threads: notify, wait e notifyAll
  • 2.
  • 3. • Uma thread A está sendo executada dentro de um método sincronizado e precisa de acesso a um recurso R que no momento está indisponível
  • 4. • Uma thread A está sendo executada dentro de um método sincronizado e precisa de acesso a um recurso R que no momento está indisponível • Se a thread A ficar esperando por R, irá bloquear o objeto impedindo que outras threads acessem o mesmo
  • 5. • Uma thread A está sendo executada dentro de um método sincronizado e precisa de acesso a um recurso R que no momento está indisponível • Se a thread A ficar esperando por R, irá bloquear o objeto impedindo que outras threads acessem o mesmo • Nesse caso a melhor solução para não causar problemas é liberar temporariamente o controle do objeto permitindo que outra thread seja executada
  • 6. • wait: bloqueia a execução da thread temporariamente, ou seja, coloca a thread em modo de espera
  • 7. • wait: bloqueia a execução da thread temporariamente, ou seja, coloca a thread em modo de espera • a thread fica em modo de espera até que seja notificada
  • 8. • wait: bloqueia a execução da thread temporariamente, ou seja, coloca a thread em modo de espera • a thread fica em modo de espera até que seja notificada • notify: notifica uma thread the estava esperando, ou seja, retorna a execução da thread
  • 9. • wait: bloqueia a execução da thread temporariamente, ou seja, coloca a thread em modo de espera • a thread fica em modo de espera até que seja notificada • notify: notifica uma thread the estava esperando, ou seja, retorna a execução da thread • notifyAll: notice todas as threads, e a que tem prioridade mais alta ganha acesso ao objeto
  • 10. public class TiqueTaque { boolean tique; synchronized void tique(boolean estaExecutando){ if (!estaExecutando){ tique = true; notify(); //notifica qualquer thread the estiver esperando return; } System.out.print("Tique "); tique = true; notify(); try { while (tique){ wait(); //espera toque terminar a execução } } catch(InterruptedException e){ System.out.println("Thread foi interrompida"); } } }
  • 11. synchronized void taque(boolean estaExecutando){ if (!estaExecutando){ tique = false; notify(); //notifica qualquer thread the estiver esperando return; } System.out.println("Taque"); tique = false; notify(); try { while (!tique){ wait(); //espera tique terminar a execução } } catch(InterruptedException e){ System.out.println("Thread foi interrompida"); } }
  • 12. public class ThreadTiqueTaque implements Runnable { Thread thread; TiqueTaque tt; final int QTD = 5; public ThreadTiqueTaque(String nome, TiqueTaque tt) { thread = new Thread(this, nome); this.tt = tt; thread.start(); } @Override public void run(){ if (thread.getName().equalsIgnoreCase("Tique")){ for (int i=0; i<QTD; i++){ tt.tique(true); } tt.tique(false); } else { for (int i=0; i<QTD; i++){ tt.taque(true); } tt.taque(false); } } }
  • 13. public static void main(String[] args) { TiqueTaque tt = new TiqueTaque(); ThreadTiqueTaque tique = new ThreadTiqueTaque("Tique", tt); ThreadTiqueTaque taque = new ThreadTiqueTaque("Taque", tt); try { tique.thread.join(); taque.thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } }
  • 14. • Experimente remover os códigos de wait e notify • Irá notar que os métodos param de trabalhar em conjunto
  • 17. http://loiane.training Fórum para dúvidas + certificado do curso. Cadastro em: