Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.



Documentos relacionados
Universidade da Beira Interior. Sistemas Distribuídos. Folha 4-1. Threads Daemon Threads

Utilizando Threads em Java

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Java Threads. Introdução

Concorrência em Java. Threads em Java

Threads. O que é uma Thread? Paralelismo

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Programação Orientada a Objetos em Java. Threads Threads Threads. Threads

THREADS EM JAVA. George Gomes Cabral

Execução concorrente em Java: threads. O que são Threads? Criação e métodos de Threads Sincronização Comunicação entre Threads

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

Programação Orientada a Objetos (DPADF 0063)

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Sistemas Operacionais

Threads. Linguagem Java. Adenilso da Silva Simão 17/05/05

Threads. Leonardo Gresta Paulino Murta

Programação Paralela. Processos. Processos. Processos. Processos. Unidade 2

Utilização de threads em Java

Reader e Writer para streams de caracteres (texto).

Threads e Concorrência em Java (Material de Apoio)

Só podem ser executados por uma Thread que detenha o lock do objecto

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Threads em Java. Java Threads. Java Componentes: JVM JVM:

Múltiplas Linhas de Execução Java (Threads)

Universidade da Beira Interior. Sistemas Distribuídos

// quando o estado do Sujeito muda

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Threads, Gerenciamento de Threads. Pool de Threads, Grupo de Threads Variáveis Locais à Threads

Programação concorrente em Java

Programação Concorrente

Classe Abstrata e Interface

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Concorrente em Java

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio

// quando o estado do Sujeito muda

Lição 11 Herança, polimorfismo e interfaces

Universidade Federal da Paraíba

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objeto Java

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Notas de Aula 09: Tratamento de exceções

Computação Paralela. Especificação de Concorrência/Paralelismo. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.1/26

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

9 Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Palavras Reservadas da Linguagem Java

Programação Orientada a Objetos Flávio de Oliveira Silva 144

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Criação de métodos em Java

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Programação Concorrente em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

PUC-SP Depto. de Ciência da Computação

Exemplo Threads com Swing:

Switch switch switch switch switch variável_inteira valor1 valor2 switch variável_inteira case case break switch case default default switch switch

Linguagem de Programação II Implementação

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Linguagem de Programação III

Estrutura de repetição do/while

Conceitos e Implementação de um Sistema Concorrente Orientado a Objeto

Serviço de Cópia e Impressão: Como instalar

Linguagem de Programação II Implementação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Escola Náutica Infante Dom Henrique. Grupo I (7.5 valores)

4 Conceito de Herança

Desenvolvimento Web TCC Turma A-1

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

Ferramentas para Programação em Processadores Multi-Core

Programação Orientada por Objectos 2007/2008

Concorr^encia. A classe Thread (java.lang)

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Transcrição:

Threads Folha 5-1 Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads. Uma Thread é similar a um processo no sentido em que corresponde a um conjunto de instruções que pode ser escalonado para execução num dado processador. No entanto, as Threads definidas num dado programa partilham o mesmo espaço de endereçamento que o processo principal que lhes deu origem. 1 - Criar uma Thread Existem duas formas de criar uma Thread em JAVA. A primeira consiste em criar uma subclasse da classe Thread e usar o método start() definido em Thread para iniciar a execução. O método start() invoca por sua vez um método run() a definir pelo utilizador, e que deverá conter a sequência de execução da Thread instanciada. Exercício 1: - Implemente e teste o seguinte exemplo: public class MyThread extends Thread { public void run() { System.out.println("Hello there, from " + getname() ); public static void main (String[] str){ MyThread Ta, Tb; Ta = new MyThread(); Tb = new MyThread(); Ta.start(); Tb.start();

Folha 5-2 - Este processo de criar uma Thread não pode ser usado se pretendermos que a classe a criar seja subclasse de alguma outra, por exemplo no caso de querermos construir uma Applet. A segunda forma de criar uma Thread é usar a interface Runnable. Em termos simples uma interface é a definição de um conjunto de métodos que a classe ou classes que implementam essa interface terão que implementar: A interface Runnable: package java.lang public interface Runnable{ public abstract void run(); No exemplo abaixo, a classe MyThread2 implementa a interface Runnable, implementado o método run() que é o único método definido na interface. A diferença entre esta classe e a classe MyThread definida anteriormente é que a classe MyThread2 não herda os métodos da classe Thread. Para agora criarmos uma nova Thread temos de passar ao construtor dessa Thread a referência de uma classe que implemente a interface Runnable. Exercício 2 - Implemente e estude o exemplo que se segue. public class MyThread2 implements Runnable{ public void run(){ System.out.println("Hi there, from " + Thread.currentThread().getName() ); public static void main (String[] str){ MyThread2 T = new MyThread2(); Thread Ta, Tb; Ta = new Thread( T ); Tb = new Thread( T ); Ta.start(); Tb.start();

2 - Junção de Threads Folha 5-3 O método join() definido na classe Thread permite fazer com que uma thread espere que a execução de uma outra termine para que a primeira possa finalmente continuar a sua própria execução. No exemplo abaixo a Thread T2 precisa de esperar que a Thread T1 termine a execução antes de poder continuar. Exercício 3 : Implemente e estude o exemplo abaixo. public class MyThread1 extends Thread { public void run(){ System.out.println (getname() + "is running"); for ( int i=0;i<5; i++){ { sleep (500); catch ( InterruptedException e) { System.out.println ("Hello there, from " + getname()); public class MyThread2 extends Thread{ private Thread wait4me; public MyThread2( Thread T) { wait4me= T; public void run() { System.out.println( getname() + " is waiting for " + wait4me.getname() + ""); { wait4me.join(); { System.out.println( wait4me.getname() + "has finished" ); for ( int i=0;i<5; i++){ { sleep (500); catch ( InterruptedException e ) {

System.out.println ("Hello there, from " + getname()); Folha 5-4 public static void main (String[] str){ MyThread1 T1 = new MyThread1(); MyThread2 T2 = new MyThread2( T1 ); System.out.println ("Starting the Threads"); T1.start(); T2.start(); 3 Daemon Threads Uma Thread Daemon é uma Thread, geralmente usada para executar serviços em background, que tem a particularidade de terminar automaticamente após todas as Threads não Daemon terem terminado. Uma Thread transforma-se numa Thread Daemon através do método setdaemon(). public class Normal extends Thread{ public void run() { for (int i=0; i<5; i++){ { sleep(500); { System.out.println (" I' m the normal Thread"); System.out.println (" The normal Thread is exiting"); public class Daemon extends Thread () public Daemon() { setdaemon( true);

public void run(){ for (int i=0; i<10; i++){ { sleep(500); { System.out.println (" I'm a daemon Thread"); Folha 5-5 Exercício 4: - Depois de implementar estas duas classes, construa uma classe em que teste ambas as classes anteriores. Após observar o comportamento do programa experimente comentar a linha onde o método setdaemon é invocado e observe a diferença de comportamento do programa. 4- Grupos de Threads As Threads de um programa podem ser agrupadas em grupos, tornando possível enviar uma mensagem simultaneamente a um conjunto de Threads. Exercício 5: Considere as classes abaixo. Complete a classe Teste e teste-a. public class MyThread extends Thread{ public MyThread( String name) { super(name); public void run (){ while (true) { System.out.println ("Sou a " + this.getname()); if ( isinterrupted() ) break; yield();

Folha 5-6 public static void main (String[] arg){ MyThread Ta, Tb, Tc; ThreadGroup this_group; this_group = Thread.currentThread().getThreadGroup(); System.out.println("O nome do grupo é: " + this_group.getname()); System.out.println("O nº de Threads activas no grupo é " + this_group.activecount()); Ta=new MyThread ("Thread A"); Tb=new MyThread ("Thread B"); Tc=new MyThread ("Thread C"); // inicie a execução das Threads // obtenha o nome do grupo e o número de threads activas nesse grupo {Thread.sleep (500); { // Pode invocar um método em todas as Threads do grupo: this_group.interrupt(); Um grupo pode ser criado explicitamente: ThreadGroup Mygroup = new ThreadGorup ( O meu grupo ) Para adicionar uma Thread ao grupo criado deverá criar um construtor da sua subclasse de Thread que inicialize o nome do grupo na superclasse Thread: class MyThread extends Thread { public MyThread ( ThreadGroup tg, String name) { super(tg, name);

Folha 5-7 Exercício 6: - Teste a criação de dois grupos de threads num mesmo programa. 5- Prioridade de uma Thread Java suporta 10 níveis de prioridades. A menor prioridade é definida por Thread.MIN_PRIORITY e a mais alta por Thread.MAX_PRIORITY. Podemos saber a prioridade de uma Thread através do método int getpriority() e podemos modificá-la com o método setpriority(int ). Exercícios: 7 - Verifique qual a prioridade por omissão de uma thread 8 - Construa uma classe Teste que use a classe MyThread definida na página 1, onde deverá acrescentar a escrita da prioridade de execução da Thread e começar por: - atribuir à thread main a prioridade máxima, - criar três threads. - forçar a thread main a parar com o método sleep(int). Estude o comportamento do programa quando atribui diferentes prioridades às três threads criadas.