Documente Academic
Documente Profesional
Documente Cultură
Threads em JAVA
Programao Concorrente
O mundo real funciona concorrentemente: vrias atividades podem ser executadas em paralelo. Exemplo: uma pessoa pode estar
compilando um programa, e recebendo uma mensagem, e, imprimindo um arquivo, e, tocando msica, etc.
mltiplos processadores
processadores distribudos sistemas operacionais simuladores
correio eletrnico
Uma unidade concorrente um componente de um programa que no exige a execuo seqencial, ou seja, que sua execuo seja realizada antes ou aps a execuo de outros componentes do programa O termo programao concorrente usado no sentido abrangente, para designar a programao paralela e a programao distribuda Concorrncia relaciona-se com fluxo de controle: em um programa, existe mais de um fluxo de controle ativo.
Fluxo de Execuo
Execuo seqencial
Comandos de controle de fluxo de execuo Seqencial Condicional Iterativo Requisio de execuo de unidades explcita:chamada de mtodos implcita: ativao de excees Programa controla a ordem de execuo
Execuo concorrente
Cada tarefa uma unidade de execuo autnoma (um thread) Tarefas podem ser totalmente independentes Exemplo: execuo de um mesmo mtodo sobre dois objetos (da mesma classe) Tarefas podem necessitar comunicao Programa no controla a ordem de execuo
tarefa 1 tarefa 1 tarefa 2 tarefa 3 cada fluxo possui uma pilha de execuo tarefa 2 tarefa 3
Execuo Concorrente
Execuo concorrente, tambm conhecida como execuo paralela, no significa execuo simultnea A execuo de unidades concorrentes admite as seguintes possibilidades:
O programa geralmente no possui controle sobre a ordem e o tempo de execuo das unidades concorrentes
Pseudo-paralela: Execuo em um nico processador; Paralela: Execuo em vrios processadores que compartilham uma memria; Distribuda: Execuo em vrios processadores independentes, sem compartilhamento de memria.
Unidades Concorrentes
Concorrncia de procedimentos/funes
podem ser tarefas de uma mesma unidade podem ser ativadas de forma implcita/explcita Em ADA, a palavra Task identifica unidade concorrente, como por exemplo: Procedure M; M Task t1; T1 T2 Task t2; ----- end M; A ativao das tarefas concorrentes implcita: quando o procedimento M chamado, as unidades t1 e t2 iniciam automaticamente sua execuo concorrente Precauo contra tarefas/processos rfos
Exemplo em Java: class Thread {... void run()...} class Concorre extends Thread{ ... } Concorre oc=new Concorre(); Thread oc = new Thread();
Uma construo que indica que aquela unidade um processo. Exemplo, Process MP< .> Uma construo que instancia uma unidade concorrente. Por exemplo: New Process ...(<args>). Ambos os esquemas acima
Conceito de Threads
Programas multithreaded: Mltiplos threads concorrentes de execuo num nico programa, realizando vrias tarefas ao mesmo tempo.
Diferentes threads podem executar em diferentes processadores, se disponveis, ou compartilhar um processador nico Diferentes threads no mesmo programa compartilham um ambiente global (memria, processador, registradores, etc.)
Conceito de Threads
As linguagens Java e Ada possuem funcionalidades MULTITHREADING na prpria estrutura da linguagem. C e C++ necessitam de biblioteca especificapara processamento MULTITHREADING Posix p_thread
Threads em JAVA
Thread-1, Thread-2,
Principais mtodos
start(): inicia a execuo da thread (mtodo run) suspend(): suspende a execuo 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 execuo de uma thread suspensa stop(): termina a execuo de uma thread; a thread no pode ser mais executada.
Principais mtodos
join(): mtodo que espera o trmino da THREAD para qual foi enviada a mensagem para ser liberada. interrupt(): mtodo que interrompe a execuo de uma THREAD. interrupted(): mtodo que testa se uma THREAD est ou no interrompida.
Criao: Neste estado, o processo pai est criando a thread que levada a fila de prontos; Execuo: Neste estado a thread est usando a CPU; Pronto: Neste estado a thread avisa a CPU que pode entrar no estado de execuo e entra na fila de prontos; Bloqueado: Neste estado, por algum motivo, a CPU bloqueia a thread, geralmente enquanto aguarda algum dispositivo de I/O; Trmino: Neste estado so desativados o contexto de hardware e a pilha desalocada. Esperando e Finalizado.
Prioridade de thread
Em Java, a prioridade determinada com um inteiro entre 1 e 10. A prioridade padro o valor 5. 10 a maior prioridade e 1 a menor. A THREAD herda a prioridade da THREAD que acriou. void setPriority(int prioridade); int getPriority( );
Prioridade de thread
Em Java, a prioridade determinada com um inteiro entre 1 e 10. A prioridade padro o valor 5. 10 a maior prioridade e 1 a menor. A THREAD herda a prioridade da THREAD que acriou. void setPriority(int prioridade); int getPriority( );
Algoritmo de escalonamento
Exemplo 01
O programa cria 04 threads e as coloca para dormir. ThreadBasica uma extenso da classe Thread.
Exerccio 01
Analise como se chama o mtodo sleep(). Crie n THREADs, onde n definido pelo usurio. Utilize o mtodo join no main para esperar as THREADs terminarem.
Escalonamento de Threads
Prioridade 10 Prioridade 9 Prioridade 8 A B C
. . .
Prioridade 3 Prioridade 2 Prioridade 1 G D E F
Exemplo 02
Prioridades de Threads Utilize o mtodo setPriority(int) para mudar a prioridade de threads Mostrar exemplo 02 e execut-lo
Exemplo 03
Exemplo que uma thread passa o controle de uma thread para eventuais outras threads. Executar o exemplo.
Utilizar os mtodos multuamente excludentes de um objeto como do tipo synchronized em Java. Utilizar os mtodos wait( ) e notify( ) para bloquear e liberar, respectivamente, as threads.
Exemplo do problema clssico do Produtor Consumidor Classes: Principal, Produtor, Consumidor e ObjetoBuffer. Execuo do exemplo.
Exemplo do problema clssico do Produtor Consumidor Utilizao de Sincronizao e Coordenao das Threads. Classes: ProdutorConsumidor, Produtor, Consumidor, ObjetoBuffer e BufferCircular. Execuo do exemplo.
A interface Runnable
Para utilizar multithreads em Java necessrio instanciar um objeto de uma classe que estende a classe bsicaThread, certo? Uma vez que Java no possui herana mltipla, como eu posso utilizar um objeto, cuja classe j derivada, como no caso da ClasseThread?
public class Filho extends Pai extends Thread { . } // isto nao eh possivel em Java
A interface Runnable
A interface Runnable
Cria-se uma thread (Classe Thread), passando para o seu construtor uma referncia do objeto que implementa a interface Runnable.
Thread uma_Thread = new Thread(Runnable obj_thread) Thread uma_Thread = new Thread(Runnable obj_thread, String nome_da_thread)
Exemplo 06
Duas classes com construtores: Pai e Me. Classes Filho e Filha herdam de Me e pai respectivamente e implementam a interface Runnable. Classe de teste chamada running.