View
498
Download
0
Category
Preview:
Citation preview
ANHANGUERA – 2016.1
PROGRAMAÇÃO CONCORRENTEAULA 03 – THREADS
Prof. Thomás da Costathomascosta@aedu.com
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
ThreadsDetalhes:• 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
ThreadsO 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
ThreadsDetalhes:• 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
ThreadsDetalhes:
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
ThreadsCiclo de Vida:
THREADS
Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
ThreadsCriando uma Thread:
THREADS
public class ExemploThread extends Thread {
@Overridepublic 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 ThreadClasse Thread
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 01package edu.anhanguera.prc.aula03; public class ExemploThread extends Thread {
@Overridepublic 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
ThreadsDetalhes:• 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
ThreadsCriando 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 02package 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
ThreadsDetalhes:• 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
Recommended