Threads: Introdução e Implementação Professor: Hyggo Almeida.

18
Threads: Introdução e Implementação Professor: Hyggo Almeida

Transcript of Threads: Introdução e Implementação Professor: Hyggo Almeida.

Page 1: Threads: Introdução e Implementação Professor: Hyggo Almeida.

Threads: Introdução e ImplementaçãoProfessor: Hyggo Almeida

Page 2: 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

2Threads: Introdução e Implementação

Page 3: Threads: Introdução e Implementação Professor: Hyggo Almeida.

O que veremos hoje?

Threads Introdução Implementação

3Threads: Introdução e Implementação

Page 4: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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

Page 5: Threads: Introdução e Implementação Professor: Hyggo Almeida.

O que é uma Thread ?

Programas “normais” (single thread) possuem apenas uma linha de execução...

5Threads: Introdução e Implementação

Page 6: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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

Page 7: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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

Page 8: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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

Page 9: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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.”); }}

Page 10: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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!

Page 11: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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

Page 12: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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()); }}

Page 13: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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!");

}}

Page 14: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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()); } }

Page 15: Threads: Introdução e Implementação Professor: Hyggo Almeida.

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!");

}}

Page 16: Threads: Introdução e Implementação Professor: Hyggo Almeida.

O que vimos hoje?

Threads Introdução Implementação

16Threads: Introdução e Implementação

Page 17: Threads: Introdução e Implementação Professor: Hyggo Almeida.

O que veremos na próxima aula?

Threads Ciclo de vida Escalonamento de Threads

17Threads: Introdução e Implementação

Page 18: Threads: Introdução e Implementação Professor: Hyggo Almeida.

Dúvidas?

?18Threads: Introdução e Implementação