2. Thread (lightweight process) é uma unidade
básica de utilização da CPU, compreendendo um
id, um contador de programa, registradores e
pilha
Compartilha seção de código, seção de dados e
outros recursos do SO pertencentes ao um
mesmo processo
Prof. Adriano Teixeira de Souza
3. Capacidade de Resposta
Compartilhamento de Recursos
Economia na criação de processos
Uso de Arquiteturas Multiprocessador
Prof. Adriano Teixeira de Souza
4. Threads de Usuário
◦ Implementadas por bibliotecas
Threads de Kernel
◦ Suportadas diretamente pelo SO
Prof. Adriano Teixeira de Souza
5. A maioria das linguagens de programação não
permite programação de atividades concorrentes
Normalmente as linguagens disponibilizam
chamadas ao SO
◦ A biblioteca Win32 fornece um conjunto de APIs para
efetuar multithreading em aplicações nativas Windows
◦ Pthreads fornece uma biblioteca para threads em
sistemas POSIX, como linux
◦ C-threads no Mach
◦ Threads no Solaris
Prof. Adriano Teixeira de Souza
6. Historicamente a linguagem ADA (DoD)
disponibilizou primitivas de concorrência porém
a linguagem não popularizou-se no meio
acadêmico e comercial
Java notavelmente é a única linguagem de uso
geral e popular a disponibilizar as primitivas de
concorrência para o programador de aplicativos
(threads)
◦ Linguagens como C, C++ e Delphi fazem
chamadas a primitivas de multithreading do SO
Todo programa java possui pelo menos um
thread de controle
◦ main executa num thread na JVM
Prof. Adriano Teixeira de Souza
7. Explicitamente pode-se criar uma classe derivada da
classe Thread, do package java.lang
É necessário redefinir o método run(), que realmente
realiza o trabalho
O método start() cria efetivamente a thread
◦ Aloca memória e inicializa um novo thread na JVM
◦ Chama run() para tornar o thread passível de execução
Construtores:
◦ public Thread (String threadName)
◦ public Thread()
Prof. Adriano Teixeira de Souza
8. Alternativamente pode-se criar uma classe que
implementa a interface Runnable
public interface Runnable {
public abstract void run();
}
Toda classe que implementa Runnable deve
definir o método run()
class Teste implements Runnable {
public void run() {
}
}
Prof. Adriano Teixeira de Souza
9. start(): inicia a execução da thread (método run)
suspend(): suspende a execução da thread que
está executando
sleep(): faz a thread que está executando dormir
por um tempo determinado
yield(): faz a thread que está executando dormir
por um tempo indeterminado
resume(): resume a execução de uma thread
suspensa
stop(): termina a execução de uma thread; a
thread não pode ser mais executada.
Prof. Adriano Teixeira de Souza
10. join(): método que espera o término da THREAD
para qual foi enviada a mensagem para ser
liberada.
interrupt(): método que interrompe a execução
de uma THREAD.
interrupted(): método que testa se uma
THREAD está ou não interrompida.
Prof. Adriano Teixeira de Souza
11. nascimento
start
pronto
Notify
Notifyall Conclusão E/S
yeld Despachar
(alocar Processador)
Tempo expira
wait
Inicia E/S
executando
esperando
bloqueado
completo
sleep
adormecido
morto
morto
Prof. Adriano Teixeira de Souza
12. Além do programa multithread, outros threads
executam assincronamente para a JVM
◦ Gerência de memória: coleta de lixo
◦ Eventos de temporização
◦ Controles gráficos
Prof. Adriano Teixeira de Souza
13. Tipicamente a JVM é implementada sobre um SO
host, ocultando detalhes de implementação
Não indica como threads serão mapeados
◦ Windows NT modelo 1-1
◦ Solaris 2 modelo N-1 e M-n posteriormente
Prof. Adriano Teixeira de Souza