Escolar Documentos
Profissional Documentos
Cultura Documentos
! Ilusão de Paralelismo
! LightWeight Processes
! Registradores e Pilha
A Classe Thread
! Para criar um Thread
! Crie uma classe que herda Thread
! Funcionamento baseado em três métodos
! public void start();
! Informa ao SO a existência do thread
! Habilita o escalonamento
" Dica:
# Para achar um primo teste a divisibilidade de
2 até a raiz do número.
Primo Thread
" Fazer uma aplicação que pergunte em quantas
Threads vai dividir o calculo.
" Baseado no número da entrada, inicie um conjunto
de Threads dividindo o intervalo.
" Exemplo:
#1 – 1000000
# 4 threads
" 1 – 1-250000
" 2 – 250001 – 500000
" 3 – 50001 – 750000
" 750001 – 1000000
resume,
notify, or
notifyAll
Thread created ready stop finished
start
running
blocked
suspend,
sleep, or wait
Thread
Várias threads
Scheduler JVM
Úm único
JVM (Java Virtual processo no SO
Machine)
Scheduler SO
SO
Kernel threads
Processadores
Prioridades
! O escalonamento é baseado em prioridades
! Range: 1 .. 10
! Quando maior, maior a prioridade.
Thread.MIN_PRIORITY
Thread.NORM_PRIORITY
Thread.MAX_PRIORITY
! Mudando a prioridade:
! void setPriority(int);
! int getPriority(int);
! Default é a do Thread Pai
Exercício
public class MathThread extends Thread {
! Os três métodos:
! Só podem ser chamado de métodos synchronized
! Não têm tratamento de deadlocks
run() {
run()
}
A interface Runnable II
" Para tornar qualquer Classe (C) Multithreaded
# Implementar a interface Runnable em C
# Criar um objeto (O) da Classe (C)
# Criar um objeto (T) da Classe Thread passando O
# Chamar o método run sobre o objeto O
" O cenário por trás:
# O campo t do objeto T é instanciado para O
# Isso é correto, pois O implementa Runnable
# Quando chama-se t.start():
" O método O.run() é executado
Um exemplo
implements Runnable
public class myClass implements Runnable
{
public static void main (String a[])
{
myClass mc1 = new myClass();
Thread t1 = new Thread (mc1);
t1.start();
}