Download - Threads
![Page 2: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/2.jpg)
Pacote java.net
Threads x ProcessosProcessos: tarefas em espaços de endereços diferentes
se comunicam usando pipes oferecidos pelo SOThreads: tarefas dentro do espaço de endereços da
aplicação se comunicam usando pipes fornecidos pela JVM
O suporte a multithreading de Java é nativoMais fácil de usar que em outras linguagens onde não é
um recurso nativo
![Page 3: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/3.jpg)
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 comCotas de tempo (time-slicing)Prioridades (preemption)
Programador pode controlar parcialmente forma de agendamento dos threadsHá dependência de plataforma no agendamento
![Page 4: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/4.jpg)
Aplicação
Em alguns tipos de aplicações, threads adicionais são essenciais. Em outras, podem melhorar o bastante a performance.
Interfaces gráficasEssencial para ter uma interface do usuário que responda
enquanto outra tarefa está sendo executadaRede
Essencial para que servidor possa continuar a esperar por outros clientes enquanto lida com as requisições de cliente conectado.
![Page 5: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/5.jpg)
Criando
Há duas estratégiasHerdar da classe java.lang.ThreadImplementar a interface java.lang.Runnable
Herdar da classe ThreadO objeto é um Thread, e sobrepõe o comportamento
padrão associado à classe ThreadImplementar 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 ThreadO run() deve conter um loop que irá rodar pelo tempo de
vida do thread. Quando o run(), terminar, o thread morre.
![Page 6: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/6.jpg)
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); } }}
![Page 7: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/7.jpg)
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); } }}
![Page 8: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/8.jpg)
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();}
![Page 9: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/9.jpg)
Ciclo de vida
![Page 10: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/10.jpg)
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++; }}
![Page 11: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/11.jpg)
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) {} } }}
![Page 12: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/12.jpg)
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) {} } }}
![Page 13: Threads](https://reader038.vdocuments.com.br/reader038/viewer/2022100506/5549d48fb4c9051c778b4f4d/html5/thumbnails/13.jpg)
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 conhecidoEnvie o comando: "GET / HTTP/1.0\n\n"Imprima o resultado
3. Servidor dedicado: escreva um servidor simples queresponda ao cliente com um eco do que foi enviado.