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

Documentos relacionados
Threads em Java. Java Threads. Java Componentes: JVM JVM:

Concorrência em Java. Threads em Java

Threads. O que é uma Thread? Paralelismo

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

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

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

THREADS EM JAVA. George Gomes Cabral

Utilizando Threads em Java

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

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

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

Java Threads. Introdução

Sistemas Operacionais I Parte VI Threads

Programação concorrente em Java

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Programação Concorrente em Java

Sistemas Operacionais

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

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

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

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

Sistemas Distribuídos INF

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

Sistemas Operacionais

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

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

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

Programação Orientada a Objetos (DPADF 0063)

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ

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

Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Especificação de Concorrência/Paralelismo

Threads. Leonardo Gresta Paulino Murta

(Aula 17) Threads em Java

Sistemas Distribuídos. Ricardo Ribeiro dos Santos

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

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

AULA Nº 08 SISTEMAS OPERACIONAIS. Threads

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

Ferramentas para Programação em Processadores Multi-Core

Fundamentos de Programaçã. ção Concorrente

Programação Concorrente

Métodos Sincronizados

Universidade Federal da Paraíba

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

Fundamentos de Sistemas Operacionais

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

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

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

Processo. Prof. Paulo Cesar F. de Oliveira, BSc, PhD

Roteiro. BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento Semáforos

Sistemas Operacionais II

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

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

Programação concorrente usando threads POSIX e Java

Linguagem de programação Java

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

Segundo trabalho prático de implementação Sistema de reserva de assentos

Sistemas Operacionais

Capítulo 2 Processos e Threads

Utilização de threads em Java

Informática UFRGS. Threads. Programação com Objetos Distribuídos (C. Geyer) C# Threads V5 1

BroadcastReceiver. O que são mensagens broadcasts? Use notificações! (Serão explicadas em breve)

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

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

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: insira as propriedades escolhidas aqui FACULDADE DE TECNOLOGIA SENAC PELOTAS

Sistemas Operacionais

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

Java : Comunicação Cliente-Servidor.

Computação II Orientação a Objetos

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

Java Standard Edition (JSE)

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela

Interfaces e Classes Internas

Programação concorrente (processos e threads)

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

Linguagem de Programação II Implementação

Conceitos de Programação Orientada a Objetos

Sistemas Operacionais Aula 7

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Arquitetura de Computadores Sistemas Operacionais II

Sistemas Operacionais

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

Threads e IO. Sérgio Luiz Ruivace Cerqueira

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

Classes e Objetos. Sintaxe de classe em Java

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

INF1404 MODELAGEM DE SISTEMAS

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

Sincronização de Threads

LabSO Gerência de Processos. Processos. Porque eu preciso entender este assunto?

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Programação Concorrente em java - Exercícios Práticos Abril 2004

Sistemas Operacionais

Linguagem de Programação II Implementação

Exclusão Mútua (mutex)

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca


Transcrição:

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

Definições Básicas Threads são sub-procesos no sistema operacional. É menos custoso gerenciar threads do que processos. As linguagens Java e Ada possuem funcionalidades MULTITHREADING na própria estrutura da linguagem. C e C++ necessitam de biblioteca especifica para processamento MULTITHREADING Posix p_thread

Thread em Java Em Java, threads são implementadas como uma CLASSE Pacote java.lang.thread É uma extensão da classe Thread Contrutores: public Thread (String nome_da_thread); public Thread ( ); // o nome sera Thread-#» Thread-1, Thread-2,

Principais Métodos run(): é o método que executa as atividades de uma THREAD. Quando este método finaliza, a THREAD também termina. start(): método que dispara a execução de uma THREAD. Este método chama o método run( ) antes de terminar. sleep(int x): método que coloca a THREAD para dormir por x milisegundos.

Principais Métodos join( ): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada. interrupt( ): método que interrompe a execução de uma THREAD. interrupted( ): método que testa se uma THREAD está ou não interrompida.

Estados de uma Thread em Java rmino do tempo de dormida notify( ) notifyall( ) nascimento start( ) Fim da E/S pronta run( ) Alocar um processador executando wait( ) sleep( ) Fim do Método run( ) E/S esperando dormindo morta bloqueada

Prioridade de Thread Em Java, a prioridade é determinada com um inteiro entre 1 e 10. A prioridade padrão é 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 Prioridade 10 A B Prioridade 9 C Prioridade 8... Prioridade 3 D E F Prioridade 2 Prioridade 1 G

Exemplo 01 O programa cria 04 threads e as coloca para dormir. ThreadBasica é uma extensão da classe Thread.

Exemplo 1 Thread01.java public class Thread01 { // criacao e start das threads public static void main( String args[] ) { System.out.println("Main: Inicio da Thread main()\n"); // Declaracao de quatro objetos do tipo ThreadBasica ThreadBasica thread1, thread2, thread3, thread4; // criacao de quatro objetos do tipo ThreadBasica thread1 = new ThreadBasica( "thread1" ); thread2 = new ThreadBasica( "thread2" ); thread3 = new ThreadBasica( "thread3" ); thread4 = new ThreadBasica( "thread4" ); System.err.println( "\nmain: Disparando as threads" ); thread1.getreferenciathread(thread2); // start de execucao das quadro Threads thread1.start(); thread2.start(); thread3.start(); thread4.start(); System.err.println( "Main:Threads Basicas iniciadas\n" ); try{ } thread1.join(); thread2.join(); thread3.join(); thread4.join(); catch(interruptedexception x) { } System.out.println("Main: Agora faça o modelo em Rede de Petri desse programa\n"); System.out.println("Main: Fim da Thread main()\n"); } // --- fim do metodo main() } // --------- fim da classe Thread01

ThreadBasica.java // Classe ThreadBsica estende a classe Thread // Cada objeto desta classe ira dormir aleatoriamente entre 0 e 5 segundos. class ThreadBasica extends Thread { private int tempo_de_sono; private ThreadBasica namorada = null; // construtor recebe o nome da thread // ele chama o construtor da classe pai (super) public ThreadBasica( String nome ) { super( nome ); // construtor da classe pai // determina o tempo do sono aleatoriamente entre 0 e 5s tempo_de_sono = (int) ( Math.random() * 5000 ); //metodo estatico da classe Math // escreve o nome da thread e seu tempo de sono } System.err.println( "Nome: " + getname() + "; tempo do sono: " + tempo_de_sono ); void getreferenciathread(thread t1) { } namorada = (ThreadBasica) t1; // metodo que ira fazer a execucao da thread public void run() { // escreve que a thread ira dormir try { } System.err.println( getname() + " vai comecar a dormir" ); //Thread.sleep( tempo_de_sono ); sleep(tempo_de_sono); //this.sleep(tempo_de_sono); // tratamento de erro caso haja algum erro durante o processo de sono da thread }/ catch ( InterruptedException interruptedexception ) { } System.err.println( interruptedexception.tostring() ); if(namorada!= null) { try{ namorada.join(); } catch(interruptedexception x) { } } // escreve o nome da thread apos o termino de seu sono System.err.println( getname() + " acordou e agora vai morrer" ); } // ----------- fim da classe ThreadBasica

Exercício 01 Analise como se chama o método sleep(). Crien THREADs, onde n é definido pelo usuário. Utilize o método join no main para esperar as THREADs terminarem. try{ uma_thread.join( ); // uma_thread.join(tempo)... } catch (InterruptedException e) { }

Escalonamento de Threads Prioridade 10 A B Prioridade 9 C Prioridade 8... Prioridade 3 D E F Prioridade 2 Prioridade 1 G

Exemplo 02 Prioridades de Threads Utilize o método setpriority(int) para mudar a prioridade de threads Utilize 01 thread com prioridade 1, 01 com prioridade 09 e as outras com prioridade 5. Faça com que uma das threads de alta prioridade durma por 10 ms antes de terminar. Faça com que outra thread de alta prioridade faça uma entrada de dado.

Exemplo 03 Problema Produtor X Consumidor - Com buffer de tamanho 1. - Variáveis compartilhadas. - A solução do problema seria utilizar-se duas THREADS: 01 consumidor e 01 produtor. - O que ocorre se não houver sincronização entre a leitura e escrita?

UML do Exemplo 03 Thread Principal Produtor escrever Buffer ler Consumidor

Exemplo 04 Problema do Produtor X Consumidor com sincronização do Buffer. Em Java, a sincronização entre threads é feita através do conceito de monitores. Monitor é um agrupamento de funções, cujas execuções não podem se dar de forma concorrente.

Exemplo 04 Utilizar os métodos multuamente excludentes de um objeto como do tipo synchronized em Java. Utilizar os métodos wait( ) e notify( ) para bloquear e liberar, respectivamente, as threads. Escreva uma classe em Java chamada Semaforo que implente as primitiva P(s) e V(s).

Exemplo 5 Utilização da Classe Semarofo para resolver o problema de Produtor- Consumidor: Utilizar dois objetos (instâncias) da classe Semaforo. s1 e s2 Valores iniciais: s1 = 1; s2 = 0;

A interface Runnable Para utilizar multithreads em Java é necessário instanciar um objeto de uma classe que estende a classe básicathread, certo? Uma vez que Java não possui herança múltipla, 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 solução encontrada em Java foi a utilização de uma interface: Runnable No caso, tem-se de implementar esta interface, que possui o método run( ). public class Filho extends Pai implements Runnable Ao implementar uma interface, a classe se capacita a ser tratada como se fosse um objeto do tipo da inteface implementada. Se a classe Filho implementar a interface Runnable, ela pode ser tratada como tal.

A interface Runnable Cria-se uma thread (Classe Thread), passando para o seu construtor uma referência 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)

Solução Baseada na Interface Runnable Classe A Thread referência Classe B Runnable

Solução Baseada em Herança da Classe Thread Thread Classe B instanciação

Exemplo 6 Classe para exemplificar a utilização da interface Runnable para implementação de Threads.