threads: introdução e implementação professor: hyggo almeida
TRANSCRIPT
![Page 1: Threads: Introdução e Implementação Professor: Hyggo Almeida](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/1.jpg)
Threads: Introdução e ImplementaçãoProfessor: Hyggo Almeida
![Page 2: Threads: Introdução e Implementação Professor: Hyggo Almeida](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081602/552fc12d497959413d8d2acb/html5/thumbnails/18.jpg)
Dúvidas?
?18Threads: Introdução e Implementação