SlideShare uma empresa Scribd logo
1 de 65
Baixar para ler offline
Threads

Elenilson Vieira
Grupo de Estudos da UFPB para a SCJP
elenilson.vieira.filho@gmail.com
O que é Thread?
O que é Thread?
   Linha de Execução

   Um processo A tem duas Thread
       Um processo A tem duas linhas de execução
Entendam como
   um fio no
    processo
Criação de Threads
   Posso extender a classe Thread

   Posso implementar a Interface Runnable
Extendendo Thread
class MyThread extends Thread {
   public void run() {
     System.out.println("Important job running in MyThread");
   }
 }
Implementando Runnable
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Important job running in MyRunnable");
    }
}


MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
Basta então criar uma instância de
             Thread?
NÃO!!!
Criação de Threads
   Uma instância da classe Thread é apenas
    uma instância como qualquer outra

   Thread é uma linha de execução
       Precisa ser startada


   Método start()
Em Threads
   A classe Thread possui vários métodos

   Para o exame precisamos entender
       start()
       yield()
       sleep()
       run()
Onde escrevo o código?
Onde escrevo o código?

  public void run() {
    // your job code goes here
  }
Runnable ou Thread?
Runnable ou Thread?
   Qual o melhor?

   Por quê?
Estados da Thread
Estados da Thread
Estado Novo
   Objecto é criado
    mas o start não
    é chamado
Runnable
   Thread está apta a ser executada
Running
   Thread está
    “trabalhando”
Bloqueada

   Thread não é
    elegível para      Chamou o método
    execução               wait()
                           yield()
                           sleep()
Morta
Como identifico
as Threads?
class NameRunnable implements Runnable {
 public void run() {
    System.out.println("NameRunnable running");
    System.out.println("Run by "
      + Thread.currentThread().getName());

    }
}
public class NameThread {
    public static void main (String [] args) {
        NameRunnable nr = new NameRunnable();
        Thread t = new Thread(nr);
        t.setName("Fred");
        t.start();
    }
}
Running this code produces the following, extra special,
output:
% java NameThread
NameRunnable running
Run by Fred
public class NameThread {
   public static void main (String [] args) {
     NameRunnable nr = new NameRunnable();
     Thread t = new Thread(nr);
     // t.setName("Fred");
     t.start();
   }
 }
Running the preceding code now gives us
 % java NameThread
 NameRunnable running
 Run by Thread-0
public class NameThreadTwo {
  public static void main (String [] args) {
    System.out.println("thread is "
     + Thread.currentThread().getName());
  }
}

which prints out
 % java NameThreadTwo
 thread is main
Múltiplas Threads
class NameRunnable implements Runnable {
   public void run() {
      for (int x = 1; x <= 3; x++) {
          System.out.println("Run by "
                 + Thread.currentThread().getName()
                 + ", x is " + x);
      }
   }
}
public class ManyNames {
    public static void main(String [] args) {
        // Make one Runnable
        NameRunnable nr = new NameRunnable();
        Thread one = new Thread(nr);
        Thread two = new Thread(nr);
        Thread three = new Thread(nr);
        one.setName("Fred");
        two.setName("Lucy");
        three.setName("Ricky");
        one.start();
        two.start();
        three.start();
    }
}
Isso é o resultado?
 Running this code might produce the following:
 % java ManyNames
 Run by Fred, x is 1
 Run by Fred, x is 2
 Run by Fred, x is 3
 Run by Lucy, x is 1
 Run by Lucy, x is 2
 Run by Lucy, x is 3
 Run by Ricky, x is 1
 Run by Ricky, x is 2
 Run by Ricky, x is 3
Nem Sempre!
Nem Sempre!
   O escalonador decide

   Cada Thread vai ter o processador a cada
    fatia de tempo

   Não necessariamente a primeira criada será
    a primeira escolhida
Qualquer uma no estado
RUNNABLE pode ser escolhida!
Podemos parar a execução sem ter
         que matá-la?
Podemos parar a execução sem ter
             que matá-la?
   sleep()

   wait

   yield()
sleep(<long>)
 try {
   Thread.sleep(5*60*1000); // Sleep for 5
 minutes
 } catch (InterruptedException ex) { }
class NameRunnable implements Runnable {
 public void run() {
   for (int x = 1; x < 4; x++) {


     System.out.println("Run by "
     + Thread.currentThread().getName());
                     try {
                       Thread.sleep(1000);
                     } catch (InterruptedException ex) { }


                 }
             }
         }
public class ManyNames {
        public static void main (String [] args) {
         // Make one Runnable
         NameRunnable nr = new NameRunnable();
         Thread one = new Thread(nr);
         one.setName("Fred");


         Thread two = new Thread(nr);
         two.setName("Lucy");


         Thread three = new Thread(nr);
         three.setName("Ricky");
         one.start();
         two.start();
         three.start();
    }
}
Running this code shows Fred, Lucy, and Ricky
alternating nicely:
          % java ManyNames
          Run by Fred
          Run by Lucy
          Run by Ricky
          Run by Fred
          Run by Lucy
          Run by Ricky
          Run by Fred
          Run by Lucy
          Run by Ricky
Prioridades
Prioridades
   Valor de 1 a 10

   Default é 5

   Constantes
       Thread.MIN_PRIORITY (1)
       Thread.NORM_PRIORITY (5)
       Thread.MAX_PRIORITY (10)
Método yield()
   Uma determinada thread pode ceder o
    restante de sua fatia de tempo com o
    processador para outra thread
Método join()
   Indica para uma Thread A que ela deve parar

   Thread A apenas continua quando a Thread
    B acabar
Como assim?
Sincronização
Slides do Professor Gledson Elias
Classes Thread-Safe
   Dados acessados sáo sincronizados
import java.util.*;
public class NameList {
    private List names = Collections.synchronizedList(
                                new LinkedList());
    public void add(String name) {
        names.add(name);
    }
    public String removeFirst() {
        if (names.size() > 0)
           return (String) names.remove(0);
        else
           return null;
    }
}
public static void main(String[] args) {
    final NameList nl = new NameList();
    nl.add("Ozymandias");
    class NameDropper extends Thread {
        public void run() {
            String name = nl.removeFirst();
            System.out.println(name);
        }
    }
    Thread t1 = new NameDropper();
    Thread t2 = new NameDropper();
    t1.start();
    t2.start();
}
Como temos os dados
  sincronizados...
Thread t1 executes names.size(), which returns 1.
Thread t1 executes names.remove(0), which returns
Ozymandias.
Thread t2 executes names.size(), which returns 0.
Thread t2 does not call remove(0).
The output here is
Ozymandias
null
import java.util.*;
public class NameList {
    private List names = new LinkedList();
    public synchronized void add(String name) {
        names.add(name);
    }
    public synchronized String removeFirst() {
        if (names.size() > 0)
           return (String) names.remove(0);
        else
           return null;
    }
}
Podemos sincronizar
   o objeto todo?
1. class ThreadA {
2.      public static void main(String [] args) {
3.          ThreadB b = new ThreadB();
4.          b.start();
5.
6.          synchronized(b) {
7.              try {
8.               System.out.println("Waiting for b to complete...");
9.               b.wait();
10.             } catch (InterruptedException e) {}
11.             System.out.println("Total is: " + b.total);
12.         }
13.     }
14. }
16. class ThreadB extends Thread {
17.     int total;
18.
19. public void run() {
20.      synchronized(this) {
21.          for(int i=0;i<100;i++) {
22.              total += i;
23.          }
24.          notify();
25.      }
26. }
27. }
wait() e
notify()
wait() e wait(<long>)
will have to get the lock for the object:
 synchronized(a){ // The thread gets the lock on 'a'
     a.wait(2000); // Thread releases the lock and waits for notify
  // only for a maximum of two seconds, then goes back to
Runnable
     // The thread reacquires the lock
     // More instructions here
 }
notify() e notifyAll()
   notify()
       Notifica uma thread esperando

   notifyAll()
       Notifica todas e quem consegui o processador vai
        executar
Threads

Mais conteúdo relacionado

Mais procurados

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-2Cristiano Pires Martins
 
Gerenciamento de Servidores Linux utilizando SNMP
Gerenciamento de Servidores Linux utilizando SNMPGerenciamento de Servidores Linux utilizando SNMP
Gerenciamento de Servidores Linux utilizando SNMPAndré Déo
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threadsSilvino Neto
 
Gerência de Redes - 2.Modelo SNMP
Gerência de Redes - 2.Modelo SNMPGerência de Redes - 2.Modelo SNMP
Gerência de Redes - 2.Modelo SNMPMauro Tapajós
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUAlexandre Duarte
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07Norton Trevisan Roman
 
Redes prática - Inetd
Redes prática - InetdRedes prática - Inetd
Redes prática - InetdLuiz Arthur
 
Redes de computadores II - 2.Servicos de Camada de Rede IP
Redes de computadores II - 2.Servicos de Camada de Rede IPRedes de computadores II - 2.Servicos de Camada de Rede IP
Redes de computadores II - 2.Servicos de Camada de Rede IPMauro Tapajós
 
(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06Norton Trevisan Roman
 
Arquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsArquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsEvandro Júnior
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10Norton Trevisan Roman
 
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)Andre Peres
 
Sistemas Operacionais Processos e Threads - Wellington Pinto de Oliveira
Sistemas Operacionais Processos e Threads - Wellington Pinto de OliveiraSistemas Operacionais Processos e Threads - Wellington Pinto de Oliveira
Sistemas Operacionais Processos e Threads - Wellington Pinto de OliveiraWellington Oliveira
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03Norton Trevisan Roman
 

Mais procurados (20)

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
 
Gerenciamento de Servidores Linux utilizando SNMP
Gerenciamento de Servidores Linux utilizando SNMPGerenciamento de Servidores Linux utilizando SNMP
Gerenciamento de Servidores Linux utilizando SNMP
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Gerência de Redes - 2.Modelo SNMP
Gerência de Redes - 2.Modelo SNMPGerência de Redes - 2.Modelo SNMP
Gerência de Redes - 2.Modelo SNMP
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPU
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07
 
Redes prática - Inetd
Redes prática - InetdRedes prática - Inetd
Redes prática - Inetd
 
Redes de computadores II - 2.Servicos de Camada de Rede IP
Redes de computadores II - 2.Servicos de Camada de Rede IPRedes de computadores II - 2.Servicos de Camada de Rede IP
Redes de computadores II - 2.Servicos de Camada de Rede IP
 
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
 
Arquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsArquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e Threads
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22
 
(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10
 
Processos+threads.2pp
Processos+threads.2ppProcessos+threads.2pp
Processos+threads.2pp
 
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)
Introdução a Redes de Computadores - 9 - Nível de Rede - IP (p1)
 
Sistemas Operacionais Processos e Threads - Wellington Pinto de Oliveira
Sistemas Operacionais Processos e Threads - Wellington Pinto de OliveiraSistemas Operacionais Processos e Threads - Wellington Pinto de Oliveira
Sistemas Operacionais Processos e Threads - Wellington Pinto de Oliveira
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 

Destaque

Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01thomasdacosta
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02thomasdacosta
 
Threads and multi threading
Threads and multi threadingThreads and multi threading
Threads and multi threadingAntonio Cesarano
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03thomasdacosta
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - IntroduçãoFabio Moura Pereira
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoFabio Moura Pereira
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 

Destaque (17)

Thread
ThreadThread
Thread
 
Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02
 
Threads and multi threading
Threads and multi threadingThreads and multi threading
Threads and multi threading
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Aula Persistência 01 (Java)
Aula Persistência 01 (Java)Aula Persistência 01 (Java)
Aula Persistência 01 (Java)
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Aula Prolog - 05
Aula Prolog - 05Aula Prolog - 05
Aula Prolog - 05
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - Unificação
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 

Semelhante a Threads

[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface RunnableLoiane Groner
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepLoiane Groner
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...Loiane Groner
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverRafael Lima
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 

Semelhante a Threads (20)

Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable[Curso Java Basico] Aula 68: Threads: Interface Runnable
[Curso Java Basico] Aula 68: Threads: Interface Runnable
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
 
Threads e sockets java
Threads e sockets javaThreads e sockets java
Threads e sockets java
 
Java 13
Java 13Java 13
Java 13
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
 
threads e-sockets-em-java
 threads e-sockets-em-java threads e-sockets-em-java
threads e-sockets-em-java
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Java 06
Java 06Java 06
Java 06
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Grupo2
Grupo2Grupo2
Grupo2
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
String e IO
String e IOString e IO
String e IO
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 

Mais de Elenilson Vieira

Mais de Elenilson Vieira (20)

Aulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz LavieriAulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz Lavieri
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JavaEE
JavaEEJavaEE
JavaEE
 
JavaME no Mercado Mobile
JavaME no Mercado MobileJavaME no Mercado Mobile
JavaME no Mercado Mobile
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Apresentação da Doom
Apresentação da DoomApresentação da Doom
Apresentação da Doom
 
Palestra sobre a Sun
Palestra sobre a SunPalestra sobre a Sun
Palestra sobre a Sun
 
Apresentação da RedeSoft
Apresentação da RedeSoftApresentação da RedeSoft
Apresentação da RedeSoft
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
A Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPBA Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPB
 
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no UnipêMini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
 
JavaME
JavaMEJavaME
JavaME
 
Concorrência com Java
Concorrência com JavaConcorrência com Java
Concorrência com Java
 
Programas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no UnipêProgramas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no Unipê
 
Mundo Livre e Aberto
Mundo Livre e AbertoMundo Livre e Aberto
Mundo Livre e Aberto
 
JavaME - Aula 2
JavaME - Aula 2JavaME - Aula 2
JavaME - Aula 2
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
 
Apostila JavaME
Apostila JavaMEApostila JavaME
Apostila JavaME
 
Sincronização - Glêdson Elias
Sincronização - Glêdson EliasSincronização - Glêdson Elias
Sincronização - Glêdson Elias
 
Collections e Generics
Collections e GenericsCollections e Generics
Collections e Generics
 

Threads

  • 1. Threads Elenilson Vieira Grupo de Estudos da UFPB para a SCJP elenilson.vieira.filho@gmail.com
  • 2. O que é Thread?
  • 3. O que é Thread?  Linha de Execução  Um processo A tem duas Thread  Um processo A tem duas linhas de execução
  • 4. Entendam como um fio no processo
  • 5. Criação de Threads  Posso extender a classe Thread  Posso implementar a Interface Runnable
  • 6. Extendendo Thread class MyThread extends Thread { public void run() { System.out.println("Important job running in MyThread"); } }
  • 7. Implementando Runnable class MyRunnable implements Runnable { public void run() { System.out.println("Important job running in MyRunnable"); } } MyRunnable r = new MyRunnable(); Thread t = new Thread(r);
  • 8. Basta então criar uma instância de Thread?
  • 10. Criação de Threads  Uma instância da classe Thread é apenas uma instância como qualquer outra  Thread é uma linha de execução  Precisa ser startada  Método start()
  • 11.
  • 12. Em Threads  A classe Thread possui vários métodos  Para o exame precisamos entender  start()  yield()  sleep()  run()
  • 13. Onde escrevo o código?
  • 14. Onde escrevo o código? public void run() { // your job code goes here }
  • 16. Runnable ou Thread?  Qual o melhor?  Por quê?
  • 19. Estado Novo  Objecto é criado mas o start não é chamado
  • 20. Runnable  Thread está apta a ser executada
  • 21. Running  Thread está “trabalhando”
  • 22. Bloqueada  Thread não é elegível para  Chamou o método execução  wait()  yield()  sleep()
  • 23. Morta
  • 25. class NameRunnable implements Runnable { public void run() { System.out.println("NameRunnable running"); System.out.println("Run by " + Thread.currentThread().getName()); } }
  • 26. public class NameThread { public static void main (String [] args) { NameRunnable nr = new NameRunnable(); Thread t = new Thread(nr); t.setName("Fred"); t.start(); } } Running this code produces the following, extra special, output: % java NameThread NameRunnable running Run by Fred
  • 27. public class NameThread { public static void main (String [] args) { NameRunnable nr = new NameRunnable(); Thread t = new Thread(nr); // t.setName("Fred"); t.start(); } } Running the preceding code now gives us % java NameThread NameRunnable running Run by Thread-0
  • 28. public class NameThreadTwo { public static void main (String [] args) { System.out.println("thread is " + Thread.currentThread().getName()); } } which prints out % java NameThreadTwo thread is main
  • 30. class NameRunnable implements Runnable { public void run() { for (int x = 1; x <= 3; x++) { System.out.println("Run by " + Thread.currentThread().getName() + ", x is " + x); } } }
  • 31. public class ManyNames { public static void main(String [] args) { // Make one Runnable NameRunnable nr = new NameRunnable(); Thread one = new Thread(nr); Thread two = new Thread(nr); Thread three = new Thread(nr); one.setName("Fred"); two.setName("Lucy"); three.setName("Ricky"); one.start(); two.start(); three.start(); } }
  • 32. Isso é o resultado? Running this code might produce the following: % java ManyNames Run by Fred, x is 1 Run by Fred, x is 2 Run by Fred, x is 3 Run by Lucy, x is 1 Run by Lucy, x is 2 Run by Lucy, x is 3 Run by Ricky, x is 1 Run by Ricky, x is 2 Run by Ricky, x is 3
  • 34. Nem Sempre!  O escalonador decide  Cada Thread vai ter o processador a cada fatia de tempo  Não necessariamente a primeira criada será a primeira escolhida
  • 35. Qualquer uma no estado RUNNABLE pode ser escolhida!
  • 36. Podemos parar a execução sem ter que matá-la?
  • 37.
  • 38. Podemos parar a execução sem ter que matá-la?  sleep()  wait  yield()
  • 39. sleep(<long>) try { Thread.sleep(5*60*1000); // Sleep for 5 minutes } catch (InterruptedException ex) { }
  • 40. class NameRunnable implements Runnable { public void run() { for (int x = 1; x < 4; x++) { System.out.println("Run by " + Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException ex) { } } } }
  • 41. public class ManyNames { public static void main (String [] args) { // Make one Runnable NameRunnable nr = new NameRunnable(); Thread one = new Thread(nr); one.setName("Fred"); Thread two = new Thread(nr); two.setName("Lucy"); Thread three = new Thread(nr); three.setName("Ricky"); one.start(); two.start(); three.start(); } }
  • 42. Running this code shows Fred, Lucy, and Ricky alternating nicely: % java ManyNames Run by Fred Run by Lucy Run by Ricky Run by Fred Run by Lucy Run by Ricky Run by Fred Run by Lucy Run by Ricky
  • 44. Prioridades  Valor de 1 a 10  Default é 5  Constantes  Thread.MIN_PRIORITY (1)  Thread.NORM_PRIORITY (5)  Thread.MAX_PRIORITY (10)
  • 45. Método yield()  Uma determinada thread pode ceder o restante de sua fatia de tempo com o processador para outra thread
  • 46. Método join()  Indica para uma Thread A que ela deve parar  Thread A apenas continua quando a Thread B acabar
  • 48.
  • 50. Slides do Professor Gledson Elias
  • 51. Classes Thread-Safe  Dados acessados sáo sincronizados
  • 52. import java.util.*; public class NameList { private List names = Collections.synchronizedList( new LinkedList()); public void add(String name) { names.add(name); } public String removeFirst() { if (names.size() > 0) return (String) names.remove(0); else return null; } }
  • 53. public static void main(String[] args) { final NameList nl = new NameList(); nl.add("Ozymandias"); class NameDropper extends Thread { public void run() { String name = nl.removeFirst(); System.out.println(name); } } Thread t1 = new NameDropper(); Thread t2 = new NameDropper(); t1.start(); t2.start(); }
  • 54. Como temos os dados sincronizados...
  • 55. Thread t1 executes names.size(), which returns 1. Thread t1 executes names.remove(0), which returns Ozymandias. Thread t2 executes names.size(), which returns 0. Thread t2 does not call remove(0). The output here is Ozymandias null
  • 56.
  • 57. import java.util.*; public class NameList { private List names = new LinkedList(); public synchronized void add(String name) { names.add(name); } public synchronized String removeFirst() { if (names.size() > 0) return (String) names.remove(0); else return null; } }
  • 58. Podemos sincronizar o objeto todo?
  • 59.
  • 60. 1. class ThreadA { 2. public static void main(String [] args) { 3. ThreadB b = new ThreadB(); 4. b.start(); 5. 6. synchronized(b) { 7. try { 8. System.out.println("Waiting for b to complete..."); 9. b.wait(); 10. } catch (InterruptedException e) {} 11. System.out.println("Total is: " + b.total); 12. } 13. } 14. }
  • 61. 16. class ThreadB extends Thread { 17. int total; 18. 19. public void run() { 20. synchronized(this) { 21. for(int i=0;i<100;i++) { 22. total += i; 23. } 24. notify(); 25. } 26. } 27. }
  • 63. wait() e wait(<long>) will have to get the lock for the object: synchronized(a){ // The thread gets the lock on 'a' a.wait(2000); // Thread releases the lock and waits for notify // only for a maximum of two seconds, then goes back to Runnable // The thread reacquires the lock // More instructions here }
  • 64. notify() e notifyAll()  notify()  Notifica uma thread esperando  notifyAll()  Notifica todas e quem consegui o processador vai executar