Concorrência em Java

17
Concorrência em Java Threads 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 Presentation

Transcript of Concorrência em Java

Page 1: Concorrência em Java

Concorrência em Java

Threads em Java

Page 2: Concorrência em Java

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

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

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

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

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

Escalonamento Pre-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

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

Ciclo de Vida de uma Thread

Page 10: Concorrência em Java

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

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

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

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

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

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

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.– Classes para gerenciamento de grupos (pools) de threads.– Classes da API que podem ser acessadas concorrentemente.

Page 17: Concorrência em Java

Gerenciando Grupos 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