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
Download

18.CicloDeVidaEscalonamento