Ciclo de vida e escalonamento deThreads Professor: Hyggo Almeida O que vimos na última aula? Threads Introdução Implementação Ciclo de vida e escalonamento deThreads 2 O que veremos hoje? Threads Ciclo de vida Escalonamento Ciclo de vida e escalonamento deThreads 3 Ciclo de vida de uma thread Diagrama de estados Escalona a thread para executar (método run) Qualquer outra operação causa IllegalThreadStateException New Thread start Runnable run Thread myThread = new Thread(“mine”); Ciclo de vida e escalonamento deThreads Dead sleep/wait Not Runnable Ou há uma chamada de Tempo passou; sistema notify que o deixa lento (I/O) chamado; I/O terminou Fim da execução do método run 4 Ciclo de vida de uma thread Parando uma thread... Não utilizar o método stop() Depreciado Problemas de segurança Finalize a execução através da finalização do método run() Deixe o coletor de lixo fazer o restante do trabalho myThread = null; Ciclo de vida e escalonamento deThreads 5 Ciclo de vida de uma thread Estado atual da thread... em Java Método isAlive() true significa que o estado é RUNNABLE ou NON-RUNNABLE Em Java 5 há o método getState() NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED 6 Escalonamento de threads Em uma única CPU tem-se uma ilusão de paralelismo Mesmo com várias CPUs pode haver mais threads a serem executadas O ilusionismo aqui é realizado através de escalonamento JVM – Escalonamento com prioridades fixas 7 Ciclo de vida e escalonamento deThreads Escalonamento de threads JVM – Escalonamento com prioridades fixas Quando uma thread é criada possui a prioridade da thread na qual foi criada O método setPriority pode ser usado para definir prioridades entre MIN_PRIORITY e MAX_PRIORITY Quanto maior o valor, mais prioritária é a execução de uma thread em relação às outras Quando a CPU procura uma thread, escolhe o de maior prioridade que esteja pronto para executar Se as prioridades são iguais, escolhe-se aleatoriamente Ciclo de vida e escalonamento deThreads 8 Escalonamento de threads JVM – Escalonamento com prioridades fixas A thread executa até que... ...uma thread de mais alta prioridade se torna pronta para rodar (preemption) ...ela ceda a CPU (chamando o método yield()) ...o método run()termine (DEAD) ...sua fatia de tempo acabe (time slicing) Neste momento outro thread pode executar seguindo a ordem de prioridades Ciclo de vida e escalonamento deThreads 9 Escalonamento de threads Time Slicing Definição de fatias de tempo Sistema operacional com suporte a threads Para evitar threads egoístas Pode-se tomar o controle da CPU Força que as threads da JVM tenham fatias de tempo O método yield() pode ser usado para realizar o time slicing no nível da JVM 10 Ciclo de vida e escalonamento deThreads O que vimos hoje? Threads Ciclo de vida Escalonamento Ciclo de vida e escalonamento deThreads 11 O que veremos na próxima aula? Threads Sincronização Ciclo de vida e escalonamento deThreads 12 Dúvidas? ? Ciclo de vida e escalonamento deThreads 13