20
ANHANGUERA – 2016.1 PROGRAMAÇÃO CONCORRENTE AULA 03 – THREADS Prof. Thomás da Costa [email protected]

Programação Concorrente - Aula 03

Embed Size (px)

Citation preview

Page 1: Programação Concorrente - Aula 03

ANHANGUERA – 2016.1

PROGRAMAÇÃO CONCORRENTEAULA 03 – THREADS

Prof. Thomás da [email protected]

Page 2: Programação Concorrente - Aula 03

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

THREADS

THREADS

Page 3: Programação Concorrente - Aula 03

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.

Page 4: Programação Concorrente - Aula 03

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

Page 5: Programação Concorrente - Aula 03

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.

Page 6: Programação Concorrente - Aula 03

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

Page 7: Programação Concorrente - Aula 03

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.

Page 8: Programação Concorrente - Aula 03

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

Page 9: Programação Concorrente - Aula 03

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

Page 10: Programação Concorrente - Aula 03

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();}

}

Page 11: Programação Concorrente - Aula 03

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

Page 12: Programação Concorrente - Aula 03

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

Page 13: Programação Concorrente - Aula 03

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();

} }

Page 14: Programação Concorrente - Aula 03

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

Page 15: Programação Concorrente - Aula 03

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();}

}

Page 16: Programação Concorrente - Aula 03

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:

Page 17: Programação Concorrente - Aula 03

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();}

 }

Page 18: Programação Concorrente - Aula 03

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) {}}

 }

Page 19: Programação Concorrente - Aula 03

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

Page 20: Programação Concorrente - Aula 03

Obrigado !!!

ANHANGUERA – 2016.1