SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

Java 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesJava 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesGanesh Samarthyam
 
Spark Summit EU talk by Nimbus Goehausen
Spark Summit EU talk by Nimbus GoehausenSpark Summit EU talk by Nimbus Goehausen
Spark Summit EU talk by Nimbus GoehausenSpark Summit
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.David Gómez García
 
Exceptional Handling in Java
Exceptional Handling in JavaExceptional Handling in Java
Exceptional Handling in JavaQaziUmarF786
 
Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage CollectionAzul Systems Inc.
 
Java Socket Programming
Java Socket ProgrammingJava Socket Programming
Java Socket ProgrammingVipin Yadav
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativaAluisioSantos4
 
Basics of Java Concurrency
Basics of Java ConcurrencyBasics of Java Concurrency
Basics of Java Concurrencykshanth2101
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time APISualeh Fatehi
 

Was ist angesagt? (20)

JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Java 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesJava 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional Interfaces
 
Spark Summit EU talk by Nimbus Goehausen
Spark Summit EU talk by Nimbus GoehausenSpark Summit EU talk by Nimbus Goehausen
Spark Summit EU talk by Nimbus Goehausen
 
Exception handling in java
Exception handling in javaException handling in java
Exception handling in java
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
Exceptional Handling in Java
Exceptional Handling in JavaExceptional Handling in Java
Exceptional Handling in Java
 
Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage Collection
 
Java Socket Programming
Java Socket ProgrammingJava Socket Programming
Java Socket Programming
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
Java reflection
Java reflectionJava reflection
Java reflection
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativa
 
Basics of Java Concurrency
Basics of Java ConcurrencyBasics of Java Concurrency
Basics of Java Concurrency
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Socket
SocketSocket
Socket
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Java programming-examples
Java programming-examplesJava programming-examples
Java programming-examples
 
Java 8 date & time api
Java 8 date & time apiJava 8 date & time api
Java 8 date & time api
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von Mario Jorge Pereira

Educacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial GenerativaEducacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial GenerativaMario Jorge Pereira
 
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 AlgoritmosMario Jorge Pereira
 
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 JavaMario Jorge Pereira
 
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 Mario Jorge Pereira
 
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...Mario Jorge Pereira
 
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 Mario Jorge Pereira
 

Mehr von Mario Jorge Pereira (20)

Educacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial GenerativaEducacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial Generativa
 
Html
HtmlHtml
Html
 
HTTP
HTTPHTTP
HTTP
 
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
 

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.