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