SlideShare a Scribd company logo
1 of 13
Download to read offline
Threads

Mario Jorge Pereira
mariojp@gmail.com
Pacote java.net
Threads x Processos
Processos: tarefas em espaços de endereços diferentes
se comunicam usando pipes oferecidos pelo SO
Threads: tarefas dentro do espaço de endereços da
aplicação se comunicam usando pipes fornecidos pela
JVM
O suporte a multithreading de Java é nativo
Mais fácil de usar que em outras linguagens onde não é
um recurso nativo
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 com
Cotas de tempo (time-slicing)
Prioridades (preemption)
Programador pode controlar parcialmente forma de
agendamento dos threads
Há dependência de plataforma no agendamento
Aplicação
Em alguns tipos de aplicações, threads adicionais são
essenciais. Em outras, podem melhorar o bastante a
performance.
Interfaces gráficas
Essencial para ter uma interface do usuário que responda
enquanto outra tarefa está sendo executada
Rede
Essencial para que servidor possa continuar a esperar por
outros clientes enquanto lida com as requisições de
cliente conectado.
Criando
Há duas estratégias
Herdar da classe java.lang.Thread
Implementar a interface java.lang.Runnable
Herdar da classe Thread
O objeto é um Thread, e sobrepõe o comportamento
padrão associado à classe Thread
Implementar 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 Thread
O run() deve conter um loop que irá rodar pelo tempo de
vida do thread. Quando o run(), terminar, o thread
morre.
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);
}
}
}
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);
}
}
}
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();
}
Ciclo de vida
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++;
}
}
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) {}
}
}
}
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) {}
}
}
}
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 conhecido
Envie o comando: "GET / HTTP/1.0nn"
Imprima o resultado
3. Servidor dedicado: escreva um servidor simples que
responda ao cliente com um eco do que foi enviado.

More Related Content

What's hot

JavaScript Engines and Event Loop
JavaScript Engines and Event Loop JavaScript Engines and Event Loop
JavaScript Engines and Event Loop Tapan B.K.
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Java ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaJava ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaEdureka!
 
TypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation GuideTypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation GuideNascenia IT
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design PatternsBobby Bouwmann
 
Introduce yourself to java 17
Introduce yourself to java 17Introduce yourself to java 17
Introduce yourself to java 17ankitbhandari32
 
用 Kotlin 做自動化工具
用 Kotlin 做自動化工具用 Kotlin 做自動化工具
用 Kotlin 做自動化工具Shengyou Fan
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)arvind pandey
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytestviniciusban
 
Javascript Orientado a Objeto
Javascript Orientado a ObjetoJavascript Orientado a Objeto
Javascript Orientado a ObjetoFábio Elísio
 

What's hot (20)

Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
JavaScript Engines and Event Loop
JavaScript Engines and Event Loop JavaScript Engines and Event Loop
JavaScript Engines and Event Loop
 
Introduction to java 8 stream api
Introduction to java 8 stream apiIntroduction to java 8 stream api
Introduction to java 8 stream api
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Java ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaJava ArrayList Tutorial | Edureka
Java ArrayList Tutorial | Edureka
 
Ch2 Liang
Ch2 LiangCh2 Liang
Ch2 Liang
 
Android presentation - Gradle ++
Android presentation - Gradle ++Android presentation - Gradle ++
Android presentation - Gradle ++
 
Complete Java Course
Complete Java CourseComplete Java Course
Complete Java Course
 
TypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation GuideTypeScript: Basic Features and Compilation Guide
TypeScript: Basic Features and Compilation Guide
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design Patterns
 
Introduce yourself to java 17
Introduce yourself to java 17Introduce yourself to java 17
Introduce yourself to java 17
 
用 Kotlin 做自動化工具
用 Kotlin 做自動化工具用 Kotlin 做自動化工具
用 Kotlin 做自動化工具
 
Java 8 lambda
Java 8 lambdaJava 8 lambda
Java 8 lambda
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytest
 
Javascript Orientado a Objeto
Javascript Orientado a ObjetoJavascript Orientado a Objeto
Javascript Orientado a Objeto
 
Github basics
Github basicsGithub basics
Github basics
 
java graphics
java graphicsjava graphics
java graphics
 

Viewers also liked (7)

Socket
SocketSocket
Socket
 
Java www
Java wwwJava www
Java www
 
Windows - Formulários
Windows - FormuláriosWindows - Formulários
Windows - Formulários
 
Html
HtmlHtml
Html
 
Sockets : Introdução
Sockets : IntroduçãoSockets : Introdução
Sockets : Introdução
 
HTTP
HTTPHTTP
HTTP
 
Exercicios - Java Swing
Exercicios - Java SwingExercicios - Java Swing
Exercicios - Java Swing
 

Similar to Threads Java Fundamentos

Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03thomasdacosta
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Helder da Rocha
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepLoiane Groner
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: ThreadsAlex Camargo
 

Similar to Threads Java Fundamentos (20)

Java 13
Java 13Java 13
Java 13
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
threads e-sockets-em-java
 threads e-sockets-em-java threads e-sockets-em-java
threads e-sockets-em-java
 
Thread Java
Thread JavaThread Java
Thread Java
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Threads em java
Threads em javaThreads em java
Threads em java
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: Threads
 

More from Mario Jorge Pereira

More from Mario Jorge Pereira (19)

Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Java Nuvem Appengine
Java Nuvem AppengineJava Nuvem Appengine
Java Nuvem Appengine
 
Mini curso Android
Mini curso AndroidMini curso Android
Mini curso Android
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Minicurso Android
Minicurso AndroidMinicurso Android
Minicurso Android
 
Android, por onde começar?
Android, por onde começar?Android, por onde começar?
Android, por onde começar?
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 
Android e Cloud Computing
Android e Cloud ComputingAndroid e Cloud Computing
Android e Cloud Computing
 
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) RMI (Remote Method Invocation)
RMI (Remote Method Invocation)
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
GUI - Eventos
GUI - EventosGUI - Eventos
GUI - Eventos
 
GUI Aplicações Gráficas
GUI Aplicações Gráficas GUI Aplicações Gráficas
GUI Aplicações Gráficas
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Erros comuns em java
Erros comuns em javaErros comuns em java
Erros comuns em java
 
Introdução ao java Alo Mundo
Introdução ao java Alo MundoIntrodução ao java Alo Mundo
Introdução ao java Alo Mundo
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
BI
BIBI
BI
 

Threads Java Fundamentos

  • 2. Pacote java.net Threads x Processos Processos: tarefas em espaços de endereços diferentes se comunicam usando pipes oferecidos pelo SO Threads: tarefas dentro do espaço de endereços da aplicação se comunicam usando pipes fornecidos pela JVM O suporte a multithreading de Java é nativo Mais fácil de usar que em outras linguagens onde não é um recurso nativo
  • 3. 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 com Cotas de tempo (time-slicing) Prioridades (preemption) Programador pode controlar parcialmente forma de agendamento dos threads Há dependência de plataforma no agendamento
  • 4. Aplicação Em alguns tipos de aplicações, threads adicionais são essenciais. Em outras, podem melhorar o bastante a performance. Interfaces gráficas Essencial para ter uma interface do usuário que responda enquanto outra tarefa está sendo executada Rede Essencial para que servidor possa continuar a esperar por outros clientes enquanto lida com as requisições de cliente conectado.
  • 5. Criando Há duas estratégias Herdar da classe java.lang.Thread Implementar a interface java.lang.Runnable Herdar da classe Thread O objeto é um Thread, e sobrepõe o comportamento padrão associado à classe Thread Implementar 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 Thread O run() deve conter um loop que irá rodar pelo tempo de vida do thread. Quando o run(), terminar, o thread morre.
  • 6. 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); } } }
  • 7. 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); } } }
  • 8. 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(); }
  • 10. 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++; } }
  • 11. 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) {} } } }
  • 12. 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) {} } } }
  • 13. 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 conhecido Envie o comando: "GET / HTTP/1.0nn" Imprima o resultado 3. Servidor dedicado: escreva um servidor simples que responda ao cliente com um eco do que foi enviado.