Baixe o app para aproveitar ainda mais
Prévia do material em texto
Isaias Camilo Boratti -Sistemas executam tarefas de maneira concorrente (ex. corpo humano). -Computadores também executam tarefas concorrentemente (vários programas sendo executados “simultaneamente” --> controle do S. O.). -JAVA permite que o programador escreva uma aplicação contendo grupos de tarefas que são executadas de maneira concorrente --> threads. -Thread --> Constitui-se em uma seqüência de instruções que realiza determina tarefa. -Uma aplicação convencional pode ser considerada uma aplicação de uma única thread. -Java --> Multithreading 10. Threads Isaias Camilo Boratti Programa Programa thread thread a thread b Isaias Camilo Boratti Exemplo: Programa que faça um download da web de um clipe de áudio e que antes de terminar o download já inicie a sua execução. Thread - Objeto da classe Thread (java.lang) ou de uma classe derivada desta. - Na classe derivada, o projetista sobrepõe o método run() no qual coloca-se o corpo (conjunto de instruções) da thread. public class MinhaThread extends Thread { public MinhaThread (String nomedathread) { // corpo do construtor } public void run() { // corpo da thread } } Um objeto thread, após construção, é ativado através do método start() herdado da classe Thread. O método start() ativa automaticamente o método run(). Exemplo: MinhaThread umaT; umaT = new MinhaThread(“Exemplo”); umaT.start(); Ciclos de vida de um objeto thread start() yield() fim E/S notify Tempo wait(objeto) finalizado sleep(tempo) E/S Nascimento (construção) pronto executando bloqueada Finalizada (terminou ou ocorreu exceção) dormindo esperando Classe Thread (Principais métodos) Thread(String nomedathread) --> construtor; Thread() --> constrói uma thread de nome Thread-n onde n =1, 2, 3,... ; void run() --> método que deve ser sobreposto e que conterá o conj. de instruções da thread; void start() --> faz com que o objeto thread entre em estado de pronto. Ocorrerá uma exceção caso um objeto thread já em execução receba um start(); static void sleep(int t) --> faz com que o objeto thread “durma” por um tempo t expresso em milisegundos; Isaias Camilo Boratti boolean isAlive() --> retorna true se o start() já foi ativado e o thread ainda não se encerrou ou foi interrompido, caso contrário false; void setName(String nome) --> atribui um nome a thread; String getName() --> retorna o nome da thread; void yield() --> faz com que a thread saia da execução e entre em estado de pronto, possibilitando que outra thread entre em execução (sistemas sem fracionamento de tempo). Isaias Camilo Boratti thread --> tem uma prioridade (mínima : 1; máxima : 10; default : 5) void setPriority (int p) --> define uma prioridade para a thread; int getPriority() --> retorna a prioridade da thread. Obs.: Thread em Java envolve muito mais informações. Consulte bibliografia. Execução de threads com prioridades Plataformas sem fracionamento do tempo: Cada thread de prioridade mais alta toma o processador e só libera quando a thread sair do estado executando. Isaias Camilo Boratti Plataformas com fracionamento de tempo: Prioridade threads 10 a b 6 1 c d e f Exemplo public class ThreadImpressao extends Thread { private int tempo; public ThreadImpressao(String nome) { super (nome); tempo = (int)(Math.random()*10000); System.out.println(“Nome:” +this.getName() +” tempo sono:” +tempo); } public void run() { try { System.out.println (getName()+” indo dormir”); Thread.sleep(tempo); } catch (InterruptedException e) { System.out.println(e.toString(); } System.out.println(getName()+” acordando”); } } Isaias Camilo Boratti public class Principal { public static void main(String a[]) { ThreadImpressao t1, t2, t3; t1 = new ThreadImpressao(“thread 1”); t2 = new ThreadImpressao(“thread 2”); t3 = new ThreadImpressao(“thread 3”); System.out.println(“\n Iniciando threads...”); t1.start(); t2.start(); t3.start(); System.out.println(“threads já disparadas...”); } }
Compartilhar