threads: introdução e implementação professor: hyggo almeida
TRANSCRIPT
Threads: Introdução e ImplementaçãoProfessor: 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
2Threads: Introdução e Implementação
O que veremos hoje?
Threads Introdução Implementação
3Threads: Introdução e Implementação
O que é uma Thread ?
Uma thread é um contexto ou linha de execução “Vários programas executando em um mesmo
programa”
4Threads: Introdução e Implementação
Vários contextosem abas
O que é uma Thread ?
Programas “normais” (single thread) possuem apenas uma linha de execução...
5Threads: Introdução e Implementação
O que é uma Thread ?
Programas com mais de uma thread (multithreaded) possuem mais de uma linha de execução dentro do programa...
6Threads: Introdução e Implementação
O que é uma Thread ?
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... 7
Threads: Introdução e Implementação
Uma thread é um fluxo único de controle seqüencial dentro de um programa
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
8Threads: Introdução e Implementação
Exemplo de implementação...
9
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.”); }}
As classes Timer e TimerTask
Vamos implementar e ver o resultado!
E se usássemos Thread.sleep() diretamente???
10Threads: Introdução e Implementação
Tarefa escalonada.(depois de 5 segundos)Tarefa realizada!
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!
11Threads: Introdução e Implementação
Estendendo Thread
12Threads: Introdução e Implementação
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()); }}
Utilizando a implementação com Thread
13Threads: Introdução e Implementação
public class TestTwoThreads { public static void main(String[] args) {
new SimpleThread("hyggo").start();new SimpleThread("almeida").start();System.out.println("Thread principal finalizada!");
}}
Implementando Runnable
14Threads: Introdução e Implementação
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()); } }
Utilizando a implementação com Runnable
15Threads: Introdução e Implementação
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!");
}}
O que vimos hoje?
Threads Introdução Implementação
16Threads: Introdução e Implementação
O que veremos na próxima aula?
Threads Ciclo de vida Escalonamento de Threads
17Threads: Introdução e Implementação
Dúvidas?
?18Threads: Introdução e Implementação