1 / 17

Concorrência em Java

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 .

marcy
Download Presentation

Concorrência em Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Concorrência em Java Threads em Java

  2. 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 threadsinternamente.

  3. Máquina Virtual Java, Processos e Threads • Ao ser iniciada, a JVM executa o método main() do programa na thread principal, e novas threads podem ser criadas a partir desta. • Threads de uma mesma JVM compartilham memória, portas de comunicação, arquivos e outros recursos.

  4. Prioridade de Threads • Valor de 1 a 10; 5 é o default. • Threads herdam prioridade da threadque a criou. • Modificada com setPriority(int) . • Obtida com getPriority() .

  5. Prioridades de Threads • 10 -> A -> B • 9 C • 8 • 7 D -> E -> F • 6 G • 5 H -> I • 4 • 3 • 2 -> J -> K • 1

  6. Escalonamento de Threads • Threads com prioridades iguais são escalonadas em round-robin (rodízio), com cada uma ativa durante um quantum.

  7. 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.

  8. 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.

  9. Ciclo de Vida de uma Thread

  10. 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 tempode adormecimento. • Morta, quando é terminada.

  11. 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().

  12. Outros métodos de java.lang.Thread • setName: configura o nome de uma thread. • getNamedevolve 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.

  13. Outros métodos de java.lang.Thread • isInterrupteddetermina se a thread foi interrompida. • isAlive() devolve true se a thread não estiver morta. • join() esperaque a thread para a qualumamsgfoienviada, morra antes que a thread chamadorapossaprosseguir.

  14. 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. • notifyAlltodas as threads em estado de espera por um objeto tornam-se prontas quando notifyAll é feita por outra thread associada com aquele objeto.

  15. 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()

  16. 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.

  17. Gerenciando Grupos de Threads • java.lang.Objectjava.util.concurrent.Executors • A classe Executorsestende a classe raiz Object. • A classe Executors gerencia um grupo de threads. • InterfaceExecutor • InterfaceExecutorService

More Related