A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos

Apresentações semelhantes


Apresentação em tema: "Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos"— Transcrição da apresentação:

1 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS O que é Thread ? O conceito de thread está intimamente ligado ao conceito de processo, assim é fundamental entender o que são processos, como eles são representados e colocados em execução pelo Sistema Operacional, para em seguida entender as threads.

2 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS O que é Thread ? “Thread, ou processo leve, é a unidade básica de utilização da CPU, consistindo de : contador de programa, conjunto de registradores e uma pilha de execução. Thread são estruturas de execução pertencentes a um processo e assim compartilham os segmentos de código e dados e os recursos alocados ao sistema operacional pelo processo. O conjunto de threads de um processo é chamado de Task e um processo tradicional possui uma Task com apenas uma thread.” Silberschatz

3 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com “Um processo é basicamente um programa em execução, sendo constituído do código executável, dos dados referentes ao código, da pilha de execução, do valor do contador de programa (registrador PC), do valor do apontador do apontador de pilha (registrador SP), dos valores dos demais registradores do hardware, além de um conjunto de outras informações necessárias à execução dos programas.” Tanenbaum THREADS - Processo

4 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Como funciona a Thread. (Todo programador está familiarizado com a programação sequencial ) Definição : Uma thread representa um fluxo de controle de execução dentro de um programa Programa em Execução - Processo Espaço de Endereçamento Lógico Segmento de Texto Segmento de Dados Segmento de Pilha Thread Texto Pilha de Execução Registradores Process Control Block (PCB) Informações para Gerência do Processo Informações para Gerência de Memória Informações para Gerência de Arquivos Processo com apenas uma Thread

5 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Definição : Com múltiplas theads um programa possui múltiplos pontos de execução Programa em Execução - Processo Espaço de Endereçamento Lógico Segmento de Texto Segmento de Dados Segmento de Pilha Thread Texto Pilha de Execução Registradores Process Control Block (PCB) Informações para Gerência do Processo Informações para Gerência de Memória Informações para Gerência de Arquivos Processo com múltiplas Threads Thread Texto Pilha de Execução Registradores...

6 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS A execução de uma thread pode passar por quatro estados: 1) Novo 2) Executável 3) Bloqueado 4) Encerrado

7 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS

8 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Fila de Prioridade O estado pronto para executar (ready) de uma Thread não é garantia de execução. Threads são regidas por prioridades. As Threads de mais alta prioridade têm mais chances de executar primeiro. MIN_PRIORITY configurada como 1 na classe Thread MAX_PRIORITY configurada como 10 na classe Thread NORM_PRIORITY configurada como 5 na classe Thread

9 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS A thread está no estado de novo, quando é criada, ou seja, quando é alocado um descritor para a ela através do operador new. A thread está no estado de executável, quando for ativada. O processo de ativação é originado pelo método start(). É importante frisar que uma thread executável não está necessariamente sendo executada, pois quem determina o tempo de sua execução é a JVM (no caso de threads do Java) ou o S.O. (no caso das threads criadas pela JVM).

10 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS A thread está no estado de bloqueado, quando for desativada. Para desativar uma thread é necessário que ocorra uma das quatro operações a seguir: sleep(long tempo) da thread; suspend() da thread (método deprecado) A thread chamou o método wait(); A thread chamou uma operação de I/O (chamada bloqueante); A thread está no estado de encerrado, quando encerrar a sua execução. Isto pode acorrer pelo término do método run(), ou pela chamada explícita do método stop().

11 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Para a thread sair do estado de bloqueado e voltar para o estado de executável, uma das seguintes operações deve ocorrer: Retornar após o tempo especificado, caso a thread estiver adormecida; Retornar através do método resume(), caso a thread tiver sido suspensa (método suspend() deprecado); Retornar com o método notify() (ou notifyAll()), caso a thread estiver em espera; Retornar após a conclusão da operação de I/O.

12 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Há duas estratégias para implementar uma thread 1) Herdar da classe java.lang.Thread O objeto é um Thread, e sobrepõe o comportamento padrão associado à classe Thread. 2) Implementar a interface java.lang.Runnable O objeto, que define o comportamento da execução, é passado para um Thread que o executa. Nos dois casos sobreponha (redefina) o método run() que é o "main()“ do Thread O run() deve conter um loop que irá rodar pelo tempo de vida do thread. Quando o run(), terminar, o thread morre.

13 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS public class Martelo extends Thread { String produto; int quantidade; int tempo; public Martelo(String produto, int quantidade, int tempo) { this.produto = produto; this.quantidade = quantidade; this.tempo=tempo; } public void run() { for (int i = 0; i < quantidade; i++) { System.out.println("Prega " + produto + " " +(i+1)); try { sleep((long)(Math.random() * tempo)); } catch (InterruptedException e) {} } System.out.println("Martelo terminou de pregar o " + produto); } Obs; Como é uma thread chama diretamente o método sleep.

14 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Para executar um objeto da classe Martelo, que é uma Thread, após a criação do objeto deve-se chamar o método start. Exemplo: Martelo m1 = new Martelo("prego pequeno", 3, 100); Martelo m2 = new Martelo("prego grande", 3, 100); m1.start(); m2.start(); // cria duas threads concorrentes que ficaram “batendo” em um prego grande e em um prego pequeno de forma aleatória. m1.setPriority(Thread.NORM_PRIORITY+4); m2.setPriority(Thread.NORM_PRIORITY);

15 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS public class ChaveInglesa implements Runnable { String produto; int quantidade; int tempo; public ChaveInglesa(String produto, int quantidade, int tempo) { this.produto = produto; this.quantidade = quantidade; this.tempo=tempo; } public void run() { for (int i = 0; i < quantidade; i++) { System.out.println("Aperta" + " " + produto+" " +(i+1)); try { Thread.sleep((long) (Math.random() * tempo)); } catch (InterruptedException e) {} } System.out.println("Chave Inglesa terminou de apertar a " + produto); } Obs: Como não é uma thread tem de solicitar a uma thread a execução do método sleep

16 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Para criar e executar um objeto da classe ChaveInglesa que é um Runnable, cria o objeto, em seguida cria um objeto Thread passando o objeto ChaveInglesa como parâmetro e depois chama o método start da thread. Exemplo: ChaveInglesa c1 = new ChaveInglesa("rosca pequena", 3, 100); ChaveInglesa c2 = new ChaveInglesa("rosca grande", 3, 100); Thread t1 =new Thread(c1); Thread t2 =new Thread(c2); t1.start(); t2.start(); // cria dois objetos Runnable concorrentes que ficaram “apertando” uma rosca grande e uma rosca pequena de forma aleatória.

17 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Alguns métodos da class Thread public void run() – Deve conter o código que se deseja executar, quando a thread estiver ativa; public void start() – Inicia a thread. Ou seja, efetiva a chamada do método run(); public void stop() – encerra a thread; public static void sleep(long tempo) – deixa a thread corrente inativa por no mínimo tempo milisegundos e promove (escalona) outra thread. public static void yield() – Deixa a thread em execução temporariamente inativa e, quando possível, promove (escalona) outra thread de mesma prioridade ou maior;

18 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Mais alguns métodos da class Thread public boolean isAlive() – retorna true caso uma thread estiver no estado executável ou bloqueado. Nos demais casos retorna false; public void wait() – Interrompe a thread corrente e coloca a mesma na fila de espera (do objeto compartilhado) e aguarda que a mesma seja notificada. Este método somente pode ser chamado dentro de um método (ambiente) sincronizado; public void notify() – Notifica (desbloqueia) a próxima thread, aguardando na fila; public void notifyAll() – Notifica todas as threads.

19 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Mais alguns métodos da class Thread... public void suspend() – Coloca a thread no final da fila de sua prioridade e a deixa inativa; public void resume() – Habilita novamente a execução da thread. Este método deve ser executado por outra thread, já que a thread suspensa não está sendo executada; public void setPriority(int prioridade) – Define a prioridade de execução de uma thread. Os valores de prioridade estão entre 1 e 10; public int getPriority() – verifica a prioridade de execução de uma thread;

20 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS Recursos compartilhados Recursos compartilhados devem ser protegidos. A palavra chave para isso é o synchronized que permite que blocos sensíveis ao acesso simultâneo possam ser protegidos de corrupção. O synchronized faz isso por impedir que threads diferentes que possuem ambientes sincronizados relacionados executem estes ambientes ao mesmo tempo. Por uma questão de desempenho trechos synchronized devem ser limitados aos trechos realmente críticos (chamados região crítica).

21 Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)(arleys.castro@gmail.com)arleys.castro@gmail.com THREADS


Carregar ppt "Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos"

Apresentações semelhantes


Anúncios Google