Threads
Upcoming SlideShare
Loading in...5
×
 

Threads

on

  • 463 views

Em Java, usamos a classe Thread do pacote java.lang para criarmos linhas de execução paralelas. A classe Thread recebe como argumento um objeto com o código que desejamos rodar.

Em Java, usamos a classe Thread do pacote java.lang para criarmos linhas de execução paralelas. A classe Thread recebe como argumento um objeto com o código que desejamos rodar.

Statistics

Views

Total Views
463
Views on SlideShare
443
Embed Views
20

Actions

Likes
1
Downloads
8
Comments
1

1 Embed 20

http://www.moodle.ufba.br 20

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Threads Threads Presentation Transcript

  • Threads Mario Jorge Pereira mariojp@gmail.com
  • Pacote java.net Threads x Processos Processos: tarefas em espaços de endereços diferentes se comunicam usando pipes oferecidos pelo SO Threads: tarefas dentro do espaço de endereços da aplicação se comunicam usando pipes fornecidos pela JVM O suporte a multithreading de Java é nativo Mais fácil de usar que em outras linguagens onde não é um recurso nativo
  • O que é um thread Um thread parece e age como um programa individual. Threads, em Java, são objetos. Individualmente, cada thread faz de conta que tem total poder sobre a CPU Sistema garante que, de alguma forma, cada thread tenha acesso à CPU de acordo com Cotas de tempo (time-slicing) Prioridades (preemption) Programador pode controlar parcialmente forma de agendamento dos threads Há dependência de plataforma no agendamento
  • Aplicação Em alguns tipos de aplicações, threads adicionais são essenciais. Em outras, podem melhorar o bastante a performance. Interfaces gráficas Essencial para ter uma interface do usuário que responda enquanto outra tarefa está sendo executada Rede Essencial para que servidor possa continuar a esperar por outros clientes enquanto lida com as requisições de cliente conectado.
  • Criando Há duas estratégias Herdar da classe java.lang.Thread Implementar a interface java.lang.Runnable Herdar da classe Thread O objeto é um Thread, e sobrepõe o comportamento padrão associado à classe Thread Implementar a interface Runnable O objeto, que define o comportamento da execução, é passado para um Thread que o executa Nos dois casos Sobreponha o método run() que é o "main()" do Thread O run() deve conter um loop que irá rodar pelo tempo de vida do thread. Quando o run(), terminar, o thread morre.
  • Exemplo 1 public class Trabalhador extends Thread { private String produto; private int tempo; public Trabalhador(String produto,int tempo) { this.tempo = tempo; this.produto = produto; } public void run(){ for(int i = 0 ; i<50 ; i++ ){ System.out.println(i+" Inicio: "+ produto); try{ this.sleep((long)(Math.random()*tempo)); }catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(i+" Fim: "+ produto); } } }
  • Exemplo 2 public class Trabalhador implements Runnable { private String produto; private int tempo; public Trabalhador(String produto,int tempo) { this.tempo = tempo; this.produto = produto; } public void run(){ for(int i = 0 ; i<50 ; i++ ){ System.out.println(i+" Inicio: "+ produto); try{ Thread.sleep((long)(Math.random()*tempo)); }catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(i+" Fim: "+ produto); } } }
  • Usando Para o Trabalhador que extende Thread public static void main(String[] args) { Trabalhador t = new Trabalhador("dvd",500); t.start(); } Para o Trabalhador que implementa Runnable public static void main(String[] args) { Trabalhador t = new Trabalhador("cd",1000); Thread thread = new Thread(t); thread.start(); }
  • Ciclo de vida
  • Exemplo clássico de comunicação A seguinte classe é uma pilha compartilhada por dois threads. Como os métodos push() e pop() contém código que pode corromper os dados, caso não sejam executados atomicamente, eles são synchronized public class Pilha { private int index = 0; private int[] buffer = new int[30]; public synchronized int pop() { index--; return buffer[index]; } public synchronized void push(int i) { buffer[index] = i; index++; } }
  • Exemplo clássico de comunicação O objeto abaixo produz 40 componentes em intervalos de 0 a 1 segundo e os tenta armazenar na pilha. public class Produtor implements Runnable { private Pilha pilha; public Produtor(Pilha pilha) { this.pilha = pilha; } public void run() { for (int i = 0; i < 40; i++) { pilha.push(i); try { Thread.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } } }
  • Exemplo clássico de comunicação O objeto abaixo consome os 40 componentes da pilha mais lentamente, esperando de 0 a 5 segundos public class Consumidor implements Runnable { Pilha pilha; public Consumidor(Pilha pilha) { this.pilha = pilha; } public void run() { for (int i = 0; i < 40; i++) { System.out.println("Usado: "+ pilha.pop()); try { Thread.sleep((int)(Math.random() * 5000)); } catch (InterruptedException e) {} } } }
  • Socket e Thread 1. Escreva um programa que descubra e imprima o número IP da sua máquina 2. Escreva um programa que Conecte-se na porta HTTP (geralmente 80) de um servidor conhecido Envie o comando: "GET / HTTP/1.0nn" Imprima o resultado 3. Servidor dedicado: escreva um servidor simples que responda ao cliente com um eco do que foi enviado.