Threads: Introdução e Implementação Professor: Hyggo Almeida O que vimos na última aula? Visão crítica sobre padrões Revisão final Qual o impacto do “E se”? Over Engineering Threads: Introdução e Implementação 2 O que veremos hoje? Threads Introdução Implementação Threads: Introdução e Implementação 3 O que é uma Thread ? Uma thread é um contexto ou linha de execução “Vários programas executando em um mesmo programa” Vários contextos em abas Threads: Introdução e Implementação 4 O que é uma Thread ? Programas “normais” (single thread) possuem apenas uma linha de execução... Threads: Introdução e Implementação 5 O que é uma Thread ? Programas com mais de uma thread (multithreaded) possuem mais de uma linha de execução dentro do programa... Threads: Introdução e Implementação 6 O que é uma Thread ? Uma thread é um fluxo único de controle seqüencial dentro de um programa Parece ser um processo... ...mas compartilha o mesmo “espaço de endereçamento” ...é muito rápido chavear entre threads... Uma thread possui... Uma pilha de execução para chamar métodos, passar parâmetros, alocar variáveis locais... Um Program Counter... Threads: Introdução e Implementação 7 As classes Timer e TimerTask Antes de implementarmos uma thread... ...vamos utilizar objetos que utilizam thread para executar o seu trabalho Classe Timer Utilizada para escalonar tarefas Escalona instâncias de TimerTask Threads: Introdução e Implementação 8 Exemplo de implementação... public class Reminder { Timer timer; public Reminder(int seconds) { timer = new Timer(); timer.schedule(new RemindTask(),seconds*1000); } class RemindTask extends TimerTask { public void run() { System.out.println(“Tarefa realizada.”); timer.cancel(); //Finaliza o Timer } } public static void main(String args[]) { new Reminder(5); System.out.println(“Tarefa escalonada.”); } } 9 As classes Timer e TimerTask Vamos implementar e ver o resultado! Tarefa escalonada. (depois de 5 segundos) Tarefa realizada! E se usássemos Thread.sleep() diretamente??? Threads: Introdução e Implementação 10 Implementando Threads Duas formas: Extensão da Classe Thread Implementação da interface Runnable Qual escolher? Se sua classe precisa herdar de uma outra classe do seu modelo de negócio... use interface! Threads: Introdução e Implementação 11 Estendendo Thread public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + “ ” + getName()); try { sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println(“Feito! ” + getName()); } } Threads: Introdução e Implementação 12 Utilizando a implementação com Thread public class TestTwoThreads { public static void main(String[] args) { new SimpleThread("hyggo").start(); new SimpleThread("almeida").start(); System.out.println("Thread principal finalizada!"); } } Threads: Introdução e Implementação 13 Implementando Runnable public class SimpleThread implements Runnable { public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + “ ” + Thread.currentThread().getName()); try { Thread.sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println(“Feito! ”+ Thread.currentThread().getName()); } } Threads: Introdução e Implementação 14 Utilizando a implementação com Runnable public class TestTwoThreads { public static void main(String[] args) { new Thread(new SimpleThread(),"hyggo").start(); new Thread(new SimpleThread(),"almeida").start(); System.out.println("Thread principal finalizada!"); } } Threads: Introdução e Implementação 15 O que vimos hoje? Threads Introdução Implementação Threads: Introdução e Implementação 16 O que veremos na próxima aula? Threads Ciclo de vida Escalonamento de Threads Threads: Introdução e Implementação 17 Dúvidas? ? Threads: Introdução e Implementação 18