73 Curso de Java
Threads:
notify, wait e
notifyAll
• Pode ser útil suspender uma thread. Por exemplo, uma
thread que mostra a hora do dia. Podemos suspender e
posteriormente resumir a execução
• Pode ser útil suspender uma thread. Por exemplo, uma
thread que mostra a hora do dia. Podemos suspender e
posteriormente resumir a execução
• Até o Java 2 existiam os métodos suspend, resume e stop
• Pode ser útil suspender uma thread. Por exemplo, uma
thread que mostra a hora do dia. Podemos suspender e
posteriormente resumir a execução
• Até o Java 2 existiam os métodos suspend, resume e stop
• O método suspend foi substituído no Java 2 por poder
causar problema de deadlock
• Pode ser útil suspender uma thread. Por exemplo, uma
thread que mostra a hora do dia. Podemos suspender e
posteriormente resumir a execução
• Até o Java 2 existiam os métodos suspend, resume e stop
• O método suspend foi substituído no Java 2 por poder
causar problema de deadlock
• E como o resume não funciona sem o suspend, também
foi removido
• Pode ser útil suspender uma thread. Por exemplo, uma
thread que mostra a hora do dia. Podemos suspender e
posteriormente resumir a execução
• Até o Java 2 existiam os métodos suspend, resume e stop
• O método suspend foi substituído no Java 2 por poder
causar problema de deadlock
• E como o resume não funciona sem o suspend, também
foi removido
• O método stop também foi substituído no Java 2 (deve-
se usar o método interrupt no lugar)
• Mas ainda podemos adicionar esses
comportamentos na nossaThread de maneira mais
segura
• suspend: suspende temporariamente a execução da
Thread
• suspend: suspende temporariamente a execução da
Thread
• resume: resume a execução daThread
• suspend: suspende temporariamente a execução da
Thread
• resume: resume a execução daThread
• stop: termina a execução daThread
private boolean suspended;
private boolean stopped;
private String nome;
public MinhaThread(String nome){
suspended = false;
stopped = false;
this.nome = nome;
new Thread(this, nome).start();
}
@Override
public void run() {
System.out.println("Executando " + nome );
try {
for(int i=0; i<10; i++) {
System.out.println("Thread: " + nome + ", " + i);
Thread.sleep(300);
synchronized(this) {
while(suspended) {
wait();
}
if (stopped){
break;
}
}
}
} catch (InterruptedException e) {
System.out.println("Thread " + nome + " interrompida.");
}
System.out.println("Thread " + nome + " terminada.");
}
void suspend() {
suspended = true;
}
synchronized void resume() {
suspended = false;
notify();
}
synchronized void stop() {
stopped = true;
notify();
}
public static void main(String[] args) {
MinhaThread t1 = new MinhaThread("#1");
MinhaThread t2 = new MinhaThread("#2");
t1.suspend();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.suspend();
t1.resume();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.resume();
t2.stop();
}
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

[Curso Java Basico] Aula 73: Threads: resume, suspend e stop

  • 1.
    73 Curso deJava Threads: notify, wait e notifyAll
  • 2.
    • Pode serútil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução
  • 3.
    • Pode serútil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução • Até o Java 2 existiam os métodos suspend, resume e stop
  • 4.
    • Pode serútil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução • Até o Java 2 existiam os métodos suspend, resume e stop • O método suspend foi substituído no Java 2 por poder causar problema de deadlock
  • 5.
    • Pode serútil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução • Até o Java 2 existiam os métodos suspend, resume e stop • O método suspend foi substituído no Java 2 por poder causar problema de deadlock • E como o resume não funciona sem o suspend, também foi removido
  • 6.
    • Pode serútil suspender uma thread. Por exemplo, uma thread que mostra a hora do dia. Podemos suspender e posteriormente resumir a execução • Até o Java 2 existiam os métodos suspend, resume e stop • O método suspend foi substituído no Java 2 por poder causar problema de deadlock • E como o resume não funciona sem o suspend, também foi removido • O método stop também foi substituído no Java 2 (deve- se usar o método interrupt no lugar)
  • 7.
    • Mas aindapodemos adicionar esses comportamentos na nossaThread de maneira mais segura
  • 8.
    • suspend: suspendetemporariamente a execução da Thread
  • 9.
    • suspend: suspendetemporariamente a execução da Thread • resume: resume a execução daThread
  • 10.
    • suspend: suspendetemporariamente a execução da Thread • resume: resume a execução daThread • stop: termina a execução daThread
  • 11.
    private boolean suspended; privateboolean stopped; private String nome; public MinhaThread(String nome){ suspended = false; stopped = false; this.nome = nome; new Thread(this, nome).start(); } @Override public void run() { System.out.println("Executando " + nome ); try { for(int i=0; i<10; i++) { System.out.println("Thread: " + nome + ", " + i); Thread.sleep(300); synchronized(this) { while(suspended) { wait(); } if (stopped){ break; } } } } catch (InterruptedException e) { System.out.println("Thread " + nome + " interrompida."); } System.out.println("Thread " + nome + " terminada."); }
  • 12.
    void suspend() { suspended= true; } synchronized void resume() { suspended = false; notify(); } synchronized void stop() { stopped = true; notify(); }
  • 13.
    public static voidmain(String[] args) { MinhaThread t1 = new MinhaThread("#1"); MinhaThread t2 = new MinhaThread("#2"); t1.suspend(); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } t2.suspend(); t1.resume(); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } t2.resume(); t2.stop(); }
  • 14.
  • 15.
  • 16.
    http://loiane.training Fórum para dúvidas+ certificado do curso. Cadastro em:
  • 17.
  • 18.