concorrência em java
DESCRIPTION
Concorrência em Java. Threads em Java. Máquina Virtual Java, Processos e Threads. Cada instância da JVM corresponde a um processo do sistema operacional hospedeiro. A JVM não possui o conceito de processos – apenas implementa threads internamente. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/1.jpg)
Concorrência em Java
Threads em Java
![Page 2: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/2.jpg)
Máquina Virtual Java, Processos e Threads
– Cada instância da JVM corresponde a umprocesso do sistema operacional hospedeiro.
– A JVM não possui o conceito de processos –apenas implementa threads internamente.
![Page 3: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/3.jpg)
Máquina Virtual Java, Processos e Threads
– Ao ser iniciada, a JVM executa o método main()do programa na thread principal, e novasthreads podem ser criadas a partir desta.
– Threads de uma mesma JVM compartilhammemória, portas de comunicação, arquivos eoutros recursos.
![Page 4: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/4.jpg)
Prioridade de Threads
• Valor de 1 a 10; 5 é o default.• Threads herdam prioridade da thread que a
criou.• Modificada com setPriority(int) .• Obtida com getPriority() .
![Page 5: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/5.jpg)
Prioridades de Threads– 10 -> A -> B – 9 C– 8 – 7 D -> E -> F– 6 G– 5 H -> I – 4 – 3 – 2 -> J -> K– 1
![Page 6: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/6.jpg)
Escalonamento de Threads
• Threads com prioridades iguais são escalonadas em round-robin (rodízio), com cada uma ativa durante um quantum.
![Page 7: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/7.jpg)
Escalonamento Pré-Emptivo
• Threads de alta prioridade são executadas por um quantum, no esquema de rodízio até que as threads sejam concluídas.
![Page 8: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/8.jpg)
Threads
• Implementação de Threads no Java– Green Threads• Usadas em sistemas sem suporte a threads.• Threads e escalonamento implementados pela máquina virtual Java.
– Threads Nativas• Usa threads nativas e escalonador do S.O.• Usada nos sistemas suportados oficialmente.
– Linux, Solaris e Windows• Ideal em máquinas com >1 processador.
![Page 9: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/9.jpg)
Ciclo de Vida de uma Thread
![Page 10: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/10.jpg)
Estados das Threads em Java
• Nascimento• Pronta: poderia ser executada, mas o
processador está ocupado.
• Em execução: quando está rodando.
• Suspensa:– Bloqueada: aguarda operação de I/O.– Em Espera: aguarda alguma condição.– Dormindo: suspensa por um tempo de adormecimento.– Morta, quando é terminada.
![Page 11: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/11.jpg)
Principais métodos de java.lang.Thread
• run() contém o código executado pela thread.
• start() dispara a execução de uma thread, que por sua vez chama o método run().
![Page 12: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/12.jpg)
Outros métodos de java.lang.Thread
• setName: configura o nome de uma thread.• getName devolve o nome de uma thread.• currentThread() devolve uma referência da
thread em execução.• sleep() especifica quanto tempo a thread
deve dormir.• interrupt() interrompe uma thread.
![Page 13: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/13.jpg)
Outros métodos de java.lang.Thread
• isInterrupted determina se a thread foi interrompida.
• isAlive() devolve true se a thread não estiver morta.
• join() espera que a thread para a qual uma msg foi enviada, morra antes que a thread chamadora possa prosseguir.
![Page 14: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/14.jpg)
Outros métodos de java.lang.Thread
• wait a thread entra num estado de espera por um recurso/objeto particular para o qual o wait foi chamado.
• notify a thread em estado de espera torna-se pronta quando uma chamada notify é emitida por outra thread associada com aquele recurso/objeto.
• notifyAll todas as threads em estado de espera por um objeto tornam-se prontas quando notifyAll é feita por outra thread associada com aquele objeto.
![Page 15: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/15.jpg)
Nome da Thread
• Identificador não-único da Thread.• Pode ser definido ao criar a Thread com Thread(String) ou Thread(Runnable, String)• Se não for definido na criação, o nome da Thread será “Thread-n” (com n incremental)• Pode ser redefinido com setName(String)• Pode ser obtido através do método getName()
![Page 16: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/16.jpg)
Threads na Linguagem Java
• O conceito de thread está presente em Java através da classe java.lang.Thread .
• Java também oferece :– Mecanismos para sincronização e controle de concorrência entre threads (monitor,
semáforo e Locks).
![Page 17: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/17.jpg)
Pool de Threads
– Quando um programa possui muitas threads para serem executadas, pode-se agrupar threads para definir o que se chama de um pool de threads.
– Java oferece classes e interfaces que facilitam o gerenciamento de um pool de threads.
– Classes para gerenciamento de um pool de threads, existem e exemplos podem ser vistos em Deitel , Ed.6, Cap. 23, exemplos 25-4 e 23-5.
![Page 18: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/18.jpg)
Gerenciando um Pool de Threads
• java.lang.Object java.util.concurrent.Executors
• A classe Executors estende a classe raiz Object.
• A classe Executors gerencia um grupo de threads.
– Interface Executor– Interface ExecutorService
![Page 19: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/19.jpg)
Interfaces e Classes para Gerenciar Pools de Threads
• interface Runnable, para construir threads. • interface Executor
• classe Executors (com s no final é uma classe).
• interface ExecutorService, para gerenciar threads através de seu método execute.
![Page 20: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/20.jpg)
Interface Executor
• public interface Executor
• Uma interface com operações para criar um objeto que executa tarefas submetidas via interface Runnable.
• Esta interface provê um modo de desacoplar submissão de tarefa, do mecanismo de como cada tarefa será executada, incluindo detalhes do uso de threads, scheduling e outras coisas.
![Page 21: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/21.jpg)
Interface Executor
• Uma interface Executor é normalmente usada, ao invés de explicitamente criar threads.
• java.util.concurrent.Executor
• ExecutorService é sub-interface de Executor.
![Page 22: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/22.jpg)
Classe Executors
• java.lang.Object java.util.concurrent.Executors
• public class Executors extends Object
• Executors contém métodos que criam e retornam um ExecutorService .
![Page 23: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/23.jpg)
Interface ExecutorService
• public interface ExecutorService extends Executor
• Para usar pools de threads, instancie uma implementação da interface ExecutorService e entregue tarefas para execução.
![Page 24: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/24.jpg)
Interface ExecutorService
• As implementações de ExecutorService permitem que você estabeleça: – O número máximo do pool (número de threads).– O tipo de estrutura de dados para armazenar as
tarefas.– Como criar e terminar threads. – Como tratar tarefas rejeitadas, quando o número
de tarefas é maior que o número de threads no Pool de Threads.
![Page 25: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/25.jpg)
Interface ExecutorService
• Especificamos o número de tarefas ("worker threads“) a criar e o tamanho do pool de threads usados para executar as tarefas.
![Page 26: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/26.jpg)
Pool de tamanho fixo
• Um pool pode usar um número fixo de threads.
• newFixedThreadPool(int) Cria um pool com número fixo de threads dado por int e uma fila ilimitada de tarefas.
![Page 27: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/27.jpg)
Fixando número de threads
// cria ExecutorService para gerenciar threads
ExecutorService threadExecutor = Executors.newFixedThreadPool(3);
![Page 28: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/28.jpg)
Threads sob DemandanewCachedThreadPool()
• Cria um pool de threads sem limite, com recuperação automática de threads (threads que já terminaram as tarefas são reutilizados para novas tarefas e novos threads são criados só se não houver thread "velha" disponível).
• É uma boa opção quando há muitas tarefas pequenas a executar assincronamente.
• Threads não usados por 60 segundos são removidos
![Page 29: Concorrência em Java](https://reader035.vdocuments.mx/reader035/viewer/2022062811/56815f2e550346895dcdfad1/html5/thumbnails/29.jpg)
Pool de Threads
• Outro caso, por exemplo, pode usar um número fixo de threads, com menos threads do que tarefas.
• Pool de Threads