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

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

O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends.

Apresentações semelhantes


Apresentação em tema: "O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends."— Transcrição da apresentação:

1 O Mecanismo de Threads em Java 2

2 Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends Thread{ }

3 Re-escrever o método run( ) public class minhaThread extends Thread{ public void run( ){... } }

4 Criar uma classe Teste e criar um objecto public class TesteMinhaThread { minhaThread mt ; minhaThread mt ; mt = new minhaThread(“Apresentação em LP2”) ; mt = new minhaThread(“Apresentação em LP2”) ;}

5 Iniciar a thread implantada public class TesteMinhaThread { minhaThread mt = new minhaThread() ; minhaThread mt = new minhaThread() ; mt.start( ) ; mt.start( ) ; mt.run( ) ; }

6 Um exemplo: public class minhaThread extends Thread{ private static final int REPETICOES = 10; private static final int REPETICOES = 10; private static final int ATRASO=1000; private static final int ATRASO=1000; private String mensagem; private String mensagem; public minhaThread(String msg){ public minhaThread(String msg){ mensagem = msg; mensagem = msg; } public void run(){ public void run(){ try{ try{ for(int i=1; i<= REPETICOES; i++){ for(int i=1; i<= REPETICOES; i++){ System.out.println( mensagem ); System.out.println( mensagem ); sleep(ATRASO); sleep(ATRASO); } } catch(InterruptedException ie){ catch(InterruptedException ie){ } }}

7 O resultado seria: um output da mansagem: “Apresentação em LP2” uma vez por segundo, 10 vezes Apresentação em LP2

8 O interface Runnable Java dispõe de uma interface Runnable O procedimento para criação de objectos é o quase o mesmo: public class MeuRunnable implements Runnable Implementa-se o método run( ) que está declarado na interface Runnable como método abstracto. Quando construímos numa classe teste um objecto do género MeuRunnable os métodos de Thread são invocados com o nome da classe. Por exemplo: Thread.start( ) ; Thread.start( ) ;

9 A razão para de ser deste interface tem a ver com a hierarquia. Como Java não implementa a herança múltipla sempre que fosse necessário colocar uma thread a nossa classe teria obrigatoriamente que ser herdeira da classe Thread. O método de classe Thread.start( ) vai executar o método run( ) na classe que implementa a interface Runnable.

10 Agenda de Threads A J.V.M. dispõe de uma agenda para conter as threads, mas… escolhe a thread a executar de uma forma aleatória!! escolhe a thread a executar de uma forma aleatória!! cada thread corre num curto espaço de tempo, chamado de ‘time-slice’ cada thread corre num curto espaço de tempo, chamado de ‘time-slice’ uma thread está à disposição da agenda se não estiver em modo sleep( ) uma thread está à disposição da agenda se não estiver em modo sleep( ) RESUMO: as várias threads que estejam iniciadas - pelo método start( ) – vão ser executadas de forma aleatória

11 Prioridades Podem atribuir-se diferentes prioridades às várias threads através do método setPriority( ) ; Valor(inteiro)Atributoestático 0Thread.MIN_PRIORITY 5Thread.NORM_PRIORITY(defeito) 10Thread.MAX_PRIORITY

12 se for introduzido um valor fora do intervalo 0 – 10 é atirada uma excepção IllegalArgumentException a agenda de threads escolhe sempre para executar a que tiver valor mais elevado se existir mais do que uma thread com a mesma prioridade (mesmo que prioridades elevadas) é escolhida uma aleatoriamente se uma thread com prioridade elevada acorda enquanto outra thread com prioridade inferior está em execução, esta última é suspensa e a thread com maior prioridade é executada. RESUMO: apesar de parecerem bastante úteis, as prioridades não devem ser utilizadas devido à re-utilização de código (uma das características da P.O.O.).

13 Terminar as Threads uma thread termina quando o método run( ) retorna se duas ou mais threads estiverem a resolver o mesmo problema e, se uma encontrar a solução, é necessário notificar as outras para terminarem. Usa-se o método interrupt( ) para se verificar se o estado de uma thread foi alterado pode usar-se o método isInterrupted( )

14 Na classe MinhaThread por exemplo, o método run( ) podia ter sido escrito da seguinte forma: public void run(){ try{ try{ for( int i=1; for( int i=1; i <= REPETICOES && ! isInterrupted( ); i <= REPETICOES && ! isInterrupted( ); i++){ i++){ System.out.println( mensagem ); System.out.println( mensagem ); sleep(ATRASO); sleep(ATRASO); } } catch(InterruptedException ie){ catch(InterruptedException ie){ } }

15 Grupos de Threads No caso de existirem várias threads estas podem ser declaradas como pertencentes a um grupo String nome = “NomeGrupo” ThreadGroup group = new ThreadGroup( nome ) ; As threads sao geridas em sumultâneo. No caso de ser necessário notificar todas para pararem basta escrever: group.interrupt( ) ; Quando um utilizador de uma página web decide que já não quer carregar mais essa página, o programa pode terminar todas as threads em simultâneo.

16 Sincronização Duas ou mais threads podem partilhar o acesso ao mesmo objecto. O acesso partilhado pode provocar um problema que é conhecido como Race Condition. A finalidade do objecto fica depende da thread que vence a competição. Para se resolver esta situação deve-se sincronizar os métodos que alteram o estado de um objecto e que contenham threads.

17 Sincronização de Acesso a um Objecto Deve marcar-se um método com a palavra reservada synchronized. public class NumEncomendas{ public void synchronized AnularEncomenda( ){ …}} Cada objecto tem uma fechadura. Por defeito, esta está “destrancada”. Quando uma thread acciona um método “tranca” a fechadura desta

18 Quando uma outra thread tenta aceder a um método sincronizado tem que aguardar que a thread “destranque” o objecto. Não lhe pode aceder. Duas ou mais threads podem aguardar o “destrancar” de um objecto. A thread que a seguir tem o acesso ao objecto é escolhido conforme a prioridade e, em caso de igualdade de prioridades, é escolhida uma thread aleatoriamente.


Carregar ppt "O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends."

Apresentações semelhantes


Anúncios Google