ANHANGUERA – 2016.1
PROGRAMAÇÃO CONCORRENTE
AULA 03 – THREADS
Prof. Thomás da Costa
thomascosta@aedu.com
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
Threads
Detalhes:
• No desenvolvimento de software, precisamos muitas vezes efetuar
operações paralelas.
• Executando operações paralelas, nosso programa continua seu
processamento natural enquanto espera a conclusão de outras atividades.
• Os processos paralelos podem ser definidos como um fluxo de controle
ativo dentro do nosso programa.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
Threads
Processo 1
Processo 2
Processo 3
Sem Threads
Processo 1
Processo 2
Processo 3
Programa Principal
Com Threads
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
O que é?:
THREADS
É fluxo alternativo e ativo dentro do nosso programa que executa
paralelamente com o software principal e outros fluxos. Possui um bloco de
instruções ou comandos que serão executados.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• Isso é a base de Programação Concorrente.
• Conhecido como multiprogramação.
• Boa parte das aplicações desenvolvidas nos dias atuais, utiliza de threads
para processamento de informações e melhoria de performance.
• Tarefas podem ser paralelizadas em vários fluxos.
• Tarefas podem ser distribuídas quando utilizamos threads.
• Hoje grandes aplicações trabalham com threads, muitas delas distribuídas
em computadores diferentes.
• São compostas por instruções de comandos de uma linguagem. No nosso
caso o Java.
• Aproveitamos melhor os recursos de um sistema operacional.
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
THREADS
• São conhecidas como processos leves.
• Como foi dito, fazem parte do programa principal ou processo tradicional.
• Possuem prioridades.
• Podem possuir um identificador.
• Podemos iniciar, parar ou colocar uma thread em espera.
• São gerenciadas pelo sistema operacional.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Ciclo de Vida:
THREADS
Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Criando uma Thread:
THREADS
public class ExemploThread extends Thread {
@Override
public void run() {
}
}
• Para criar uma Thread utilizamos a classe Thread.
• As instruções de execução de uma Thread são desenvolvidas dentro do
método run().
Método que será executado pela Thread
Classe Thread
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 01
package edu.anhanguera.prc.aula03;
public class ExemploThread extends Thread {
@Override
public void run() {
System.out.println("Executando ExemploThread");
}
public static void main(String[] args) {
ExemploThread exemploThread = new ExemploThread();
exemploThread.start();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• Neste modelo, utilizamos uma classe como herança.
• Caso seja necessário utilizar outra classe como herança, podemos ter
problemas, pois o Java não possui herança múltipla.
• Para iniciar uma Thread utilizamos o método start().
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Criando uma Thread:
THREADS
• Podemos utilizar uma outra forma de criar uma Thread: utilizando a
interface Runnable.
public class ExemploRunnable implements Runnable {
public void run() {
}
}
Método que será executado pela Thread
Interface Runnable
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 02
package edu.anhanguera.prc.aula03;
public class ExemploRunnable implements Runnable {
public void run() {
System.out.println("Executando ExemploRunnable");
}
public static void main(String[] args) {
ExemploRunnable exemploRunnable = new ExemploRunnable();
Thread thread = new Thread(exemploRunnable);
thread.start();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• Neste modelo utilizamos uma interface.
• Caso seja necessário utilizar outra classe como herança ou até mesmo uma
interface não teremos problemas.
• Esta é a melhor forma de criar e utilizar Threads.
• Precisamos instanciar a classe Thread e passar como argumento a classe
com a interface Runnable implementada.
• Para iniciar uma Thread utilizamos o método start() da classe Thread.
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 03
package edu.anhanguera.prc.aula03;
import java.util.concurrent.ThreadLocalRandom;
public class ExemploNumIntRandomico implements Runnable {
public static int parar = 0;
public void run() {
while (parar == 0) {
int num = ThreadLocalRandom.current().nextInt(0, 9);
System.out.println("Numero: " + num);
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
}
}
public static void main(String[] args) {
ExemploNumIntRandomico numIntRandomico = new ExemploNumIntRandomico();
Thread thread = new Thread(numIntRandomico);
thread.start();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
• O comando Thread.sleep é estático.
• Sua principal função é deixar a Thread pausada ou adormecida durante um
período de tempo.
• O parâmetro do método é a quantidade de milissegundos que a Thread
deve ficar adormecida.
THREADS
Detalhes:
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 04
package edu.anhanguera.prc.aula03;
import java.util.concurrent.ThreadLocalRandom;
public class ExemploNumDoubleRandomico implements Runnable {
public static int parar = 0;
public void run() {
while (parar == 0) {
double num = ThreadLocalRandom.current().nextDouble(0, 9);
System.out.println("Numero: " + num);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
}
}
public static void main(String[] args) {
ExemploNumDoubleRandomico randomico = new ExemploNumDoubleRandomico();
Thread thread = new Thread(randomico);
thread.start();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
package edu.anhanguera.prc.aula03;
public class ExemploNumerosRandomicos {
public static void main(String[] args) {
ExemploNumDoubleRandomico doubleRandomico = new ExemploNumDoubleRandomico();
ExemploNumIntRandomico intRandomico = new ExemploNumIntRandomico();
Thread threadDouble = new Thread(doubleRandomico);
threadDouble.start();
Thread threadInt = new Thread(intRandomico);
threadInt.start();
try {
Thread.sleep(10000);
ExemploNumDoubleRandomico.parar = 1;
System.out.println("ExemploNumDoubleRandomico finalizado");
Thread.sleep(10000);
ExemploNumIntRandomico.parar = 1;
System.out.println("ExemploNumIntRandomico finalizado");
} catch (InterruptedException e) {}
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Resumo
• Threads são blocos de instruções que executam em paralelo ao programa
principal.
• Ajudam na performance de um aplicação.
• As Threads possuem um ciclo de vida.
• Podemos utilizar a classe Thread ou a interface Runnable para implementar
uma Thread.
THREADS
Obrigado !!!
ANHANGUERA – 2016.1

Programação Concorrente - Aula 03

  • 1.
    ANHANGUERA – 2016.1 PROGRAMAÇÃOCONCORRENTE AULA 03 – THREADS Prof. Thomás da Costa thomascosta@aedu.com
  • 2.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa THREADS THREADS
  • 3.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa THREADS Threads Detalhes: • No desenvolvimento de software, precisamos muitas vezes efetuar operações paralelas. • Executando operações paralelas, nosso programa continua seu processamento natural enquanto espera a conclusão de outras atividades. • Os processos paralelos podem ser definidos como um fluxo de controle ativo dentro do nosso programa.
  • 4.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa THREADS Threads Processo 1 Processo 2 Processo 3 Sem Threads Processo 1 Processo 2 Processo 3 Programa Principal Com Threads
  • 5.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads O que é?: THREADS É fluxo alternativo e ativo dentro do nosso programa que executa paralelamente com o software principal e outros fluxos. Possui um bloco de instruções ou comandos que serão executados.
  • 6.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Detalhes: • Isso é a base de Programação Concorrente. • Conhecido como multiprogramação. • Boa parte das aplicações desenvolvidas nos dias atuais, utiliza de threads para processamento de informações e melhoria de performance. • Tarefas podem ser paralelizadas em vários fluxos. • Tarefas podem ser distribuídas quando utilizamos threads. • Hoje grandes aplicações trabalham com threads, muitas delas distribuídas em computadores diferentes. • São compostas por instruções de comandos de uma linguagem. No nosso caso o Java. • Aproveitamos melhor os recursos de um sistema operacional. THREADS
  • 7.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Detalhes: THREADS • São conhecidas como processos leves. • Como foi dito, fazem parte do programa principal ou processo tradicional. • Possuem prioridades. • Podem possuir um identificador. • Podemos iniciar, parar ou colocar uma thread em espera. • São gerenciadas pelo sistema operacional.
  • 8.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Ciclo de Vida: THREADS Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html
  • 9.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Criando uma Thread: THREADS public class ExemploThread extends Thread { @Override public void run() { } } • Para criar uma Thread utilizamos a classe Thread. • As instruções de execução de uma Thread são desenvolvidas dentro do método run(). Método que será executado pela Thread Classe Thread
  • 10.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Exemplo 01 package edu.anhanguera.prc.aula03; public class ExemploThread extends Thread { @Override public void run() { System.out.println("Executando ExemploThread"); } public static void main(String[] args) { ExemploThread exemploThread = new ExemploThread(); exemploThread.start(); } }
  • 11.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Detalhes: • Neste modelo, utilizamos uma classe como herança. • Caso seja necessário utilizar outra classe como herança, podemos ter problemas, pois o Java não possui herança múltipla. • Para iniciar uma Thread utilizamos o método start(). THREADS
  • 12.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Criando uma Thread: THREADS • Podemos utilizar uma outra forma de criar uma Thread: utilizando a interface Runnable. public class ExemploRunnable implements Runnable { public void run() { } } Método que será executado pela Thread Interface Runnable
  • 13.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Exemplo 02 package edu.anhanguera.prc.aula03; public class ExemploRunnable implements Runnable { public void run() { System.out.println("Executando ExemploRunnable"); } public static void main(String[] args) { ExemploRunnable exemploRunnable = new ExemploRunnable(); Thread thread = new Thread(exemploRunnable); thread.start(); } }
  • 14.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads Detalhes: • Neste modelo utilizamos uma interface. • Caso seja necessário utilizar outra classe como herança ou até mesmo uma interface não teremos problemas. • Esta é a melhor forma de criar e utilizar Threads. • Precisamos instanciar a classe Thread e passar como argumento a classe com a interface Runnable implementada. • Para iniciar uma Thread utilizamos o método start() da classe Thread. THREADS
  • 15.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Exemplo 03 package edu.anhanguera.prc.aula03; import java.util.concurrent.ThreadLocalRandom; public class ExemploNumIntRandomico implements Runnable { public static int parar = 0; public void run() { while (parar == 0) { int num = ThreadLocalRandom.current().nextInt(0, 9); System.out.println("Numero: " + num); try { Thread.sleep(500); } catch (InterruptedException e) {} } } public static void main(String[] args) { ExemploNumIntRandomico numIntRandomico = new ExemploNumIntRandomico(); Thread thread = new Thread(numIntRandomico); thread.start(); } }
  • 16.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Threads • O comando Thread.sleep é estático. • Sua principal função é deixar a Thread pausada ou adormecida durante um período de tempo. • O parâmetro do método é a quantidade de milissegundos que a Thread deve ficar adormecida. THREADS Detalhes:
  • 17.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Exemplo 04 package edu.anhanguera.prc.aula03; import java.util.concurrent.ThreadLocalRandom; public class ExemploNumDoubleRandomico implements Runnable { public static int parar = 0; public void run() { while (parar == 0) { double num = ThreadLocalRandom.current().nextDouble(0, 9); System.out.println("Numero: " + num); try { Thread.sleep(2000); } catch (InterruptedException e) {} } } public static void main(String[] args) { ExemploNumDoubleRandomico randomico = new ExemploNumDoubleRandomico(); Thread thread = new Thread(randomico); thread.start(); } }
  • 18.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa package edu.anhanguera.prc.aula03; public class ExemploNumerosRandomicos { public static void main(String[] args) { ExemploNumDoubleRandomico doubleRandomico = new ExemploNumDoubleRandomico(); ExemploNumIntRandomico intRandomico = new ExemploNumIntRandomico(); Thread threadDouble = new Thread(doubleRandomico); threadDouble.start(); Thread threadInt = new Thread(intRandomico); threadInt.start(); try { Thread.sleep(10000); ExemploNumDoubleRandomico.parar = 1; System.out.println("ExemploNumDoubleRandomico finalizado"); Thread.sleep(10000); ExemploNumIntRandomico.parar = 1; System.out.println("ExemploNumIntRandomico finalizado"); } catch (InterruptedException e) {} } }
  • 19.
    PROGRAMAÇÃO CONCORRENTE –Prof. Thomás da Costa Resumo • Threads são blocos de instruções que executam em paralelo ao programa principal. • Ajudam na performance de um aplicação. • As Threads possuem um ciclo de vida. • Podemos utilizar a classe Thread ou a interface Runnable para implementar uma Thread. THREADS
  • 20.