Programação Concorrente/Paralela em Java



Documentos relacionados
Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Middleware de Aplicações Paralelas/Distribuídas

Middleware de Aplicações Paralelas/Distribuídas

Computação Paralela. Uma framework para aplicações concorrentes João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

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

THREADS EM JAVA. George Gomes Cabral

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

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

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

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

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

insfcanceof new public switch transient while byte continue extends for int null

Paradigmas de Computação Paralela

Threads e Sockets em Java. Threads em Java. Programas e Processos

Objetos Distribuídos. Nazareno Andrade

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

Java Threads. Introdução

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

(Aula 17) Threads em Java

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

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

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

SISTEMAS DISTRIBUÍDOS

Universidade da Beira Interior. Sistemas Distribuídos

Threads. O que é uma Thread? Paralelismo

Aula 30 - Sockets em Java

Sistemas Distribuídos

Fundamentos de Programaçã. ção Concorrente

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Programação de Computadores - I. Profª Beatriz Profº Israel

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF Novembro/2005

JDBC Tópicos avançados de acesso a base de dados relacional

Utilizando Threads em Java

Invocação Remota MC704

Java : Comunicação Cliente-Servidor.

Exemplo com SWING 1: Fazer uma aplicação, em Java, que tenha, na tela, uma JProgressBar, um JLabel e um JButton.

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

A Linguagem Java. Alberto Costa Neto DComp - UFS

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

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

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Computação Paralela. ParAspJ Aplicações Paralelas em Java (parte 1) João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

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

Programa de Computador que funciona em Rede

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

Java RMI. Alcides Calsavara

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação Concorrente em Java

UNIVERSIDADE FEDERAL DO PARANÁ

Equivale a um conjunto de if 's encadeados, porém mais estruturado.

APÊNDICE A EXEMPLO DE APLICAÇÃO

Invocação de Métodos Remotos

Java Spaces Exemplos

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

UFG - Instituto de Informática

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ...

Exemplo Threads com Swing:

Programação concorrente em Java

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

Enterprise Java Beans

Universidade Federal da Paraíba

PADI 2014/15. Aula 3.Net Remoting

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Invocação de Métodos em Objectos Remotos

Threads. Leonardo Gresta Paulino Murta

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

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

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

Mecanismo de Threads em Java 2

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

UNIVERSIDADE. Sistemas Distribuídos

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

Java. Marcio de Carvalho Victorino

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

INF01018 Aula Prática 2 RMI Remote Method Invocation

Camada de Transporte. Bruno Silvério Costa

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

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento

Sistemas Operacionais

Tutorial de Uso com o Java

Licenciatura em Engenharia Informática PROVA DE TESTE PRÁTICO Sistemas Distribuídos I 2º Semestre, 2005/2006

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Análise de Programação

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Transcrição:

em Java Resolução do Exercício 1 public class Cont extends Thread { protected int ct; public Cont() { ct=0; public synchronized void inc() { ct++; public void run() { for (int i=0; i<100; i++) { inc(); System.out.print(" i= " + ct); public static void main(string[] arg) { System.out.print("\nSequencial"); new Cont().run(); new Cont().run(); System.out.print("\nParalelo"); new Cont().start(); new Cont().run(); Resolução do Exercício 2 public class MyClock extends Thread { public MyClock() { start(); public void run() { for(int i=0; i<10; i++) { sleep(1000); catch (InterruptedException e) { System.out.println(i + " segundos"); System.out.println("terminou"); public static void main(string[] arg) { new MyClock(); // durante 10 segundos Arquitecturas Paralelas I 13 João Luís Sobral 2002

Resolução do Exercício 3 // Versão do contador com indicação de falha public class CannotIncException extends Exception { public class CannotDecException extends Exception { public class Cont1 { private int ct; public void Cont1() { ct=0; public void inc() throws CannotIncException { if (ct==100) throw new CannotIncException(); else ct++; public void dec() throws CannotDecException { if (ct==0) throw new CannotDecException(); else ct--; // Versão com métodos guardados com base no estado físico public class Cont2 { private int ct; public void Cont2() { ct=0; public synchronized void inc() { while (ct>=100) { wait(); // suspende até ser acordado por um dec catch(interruptedexception e) { ct++; if (ct==1) notifyall(); // para acordar os que suspenderam em dec public synchronized void dec() { while (ct<=0) { wait(); catch(interruptedexception e) { ct--; if (ct==99) notifyall(); Arquitecturas Paralelas I 14 João Luís Sobral 2002

Resolução do Exercício 3 (continuação) // Versão com métodos guardados com base no estado lógico public class Cont3 { private int ct; private String estado; public void Cont3() { ct=0; estado = "min"; public synchronized void inc() { while (estado=="max") { wait(); // suspende até ser acordado por um dec catch(interruptedexception e) { if (estado=="min") { notifyall(); estado="med"; ct++; if (ct==100) estado="max"; public synchronized void dec() { while (estado=="min") { wait(); catch(interruptedexception e) { if (estado=="max") { notifyall(); estado="med"; ct--; if (ct==0) estado="min"; Arquitecturas Paralelas I 15 João Luís Sobral 2002

Resolução do Exercício 4 // Counter.java public interface Counter extends Remote { void count() throws RemoteException; // CounterServer.java import java.rmi.*; import java.rmi.server.*; public class CounterServer extends RemoteObject implements Counter { public void count() throws RemoteException { for(int i=0; i<100; i++) System.out.print(i + " "); // CounterServerApp.java import javax.naming.*; import javax.rmi.portableremoteobject; public class CounterServerApp { public static void main(string args[]) { CounterServer cs1 = new CounterServer(); PortableRemoteObject.exportObject(cs1); CounterServer cs2 = new CounterServer(); PortableRemoteObject.exportObject(cs2); Context ctx = new InitialContext(); ctx.rebind("counterserver1",cs1); ctx.rebind("counterserver2",cs2); BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Type EXIT to shutdown the server"); if ("EXIT".equals(rdr.readLine())) { break; ctx.unbind("counterserver1"); ctx.unbind("counterserver2"); PortableRemoteObject.unexportObject(cs1); PortableRemoteObject.unexportObject(cs2); catch(exception e) { e.printstacktrace(); Arquitecturas Paralelas I 16 João Luís Sobral 2002

Resolução do Exercício 4 (continuação) // AssCounter.java public class AssCounter extends Thread { Counter mycount; public AssCounter(Counter c) { mycount =c; public void run() { mycount.count(); catch(exception ex) { ex.printstacktrace(); // CounterClient.java import javax.naming.*; import java.util.*; public class CounterClient { public static Counter findcounter(string cnt, Context ctx) { Counter cs=null; cs = (Counter) PortableRemoteObject.narrow( ctx.lookup(cnt), Counter.class); catch(exception ex) { ex.printstacktrace(); return(cs); public static void main(string args[]) { Context ctx = new InitialContext(); Counter cs1 = findcounter("counterserver1",ctx); Counter cs2 = findcounter("counterserver2",ctx); // Execução sequencial cs1.count(); cs2.count(); // Execução em paralelo (new AssCounter(cs1)).start(); cs2.count(); catch(exception ex) { ex.printstacktrace(); Arquitecturas Paralelas I 17 João Luís Sobral 2002

Resolução do Exercício 5. São alteradas as classes AssCounter e CounterClient e é adicionado a interface Callback: // Callback.java public interface Callback { void callop(); // AssCounter.java public class AssCounter extends Thread { Counter mycount; Callback myclient; public AssCounter(Counter c, Callback cl) { mycount =c; myclient = cl; public void run() { mycount.count(); catch(exception ex) { ex.printstacktrace(); myclient.callop(); // CounterClient.java public class CounterClient implements Callback { public void execute() { Context ctx = new InitialContext(); Counter cs1 = findcounter("counterserver1",ctx); Counter cs2 = findcounter("counterserver2",ctx); // Execução em paralelo new AssCounter(cs1,this).start(); new AssCounter(cs2,this).start(); catch(exception ex) { ex.printstacktrace(); public void callop() { System.out.println("Done"); public static void main(string args[]) { new CounterClient().execute(); Arquitecturas Paralelas I 18 João Luís Sobral 2002

Resolução do Exercício 6 // Counter.cs using System; using System.Runtime.Remoting.Messaging; public abstract class Counter: MarshalByRefObject { public abstract void count(); // CounterServer.cs using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.Http; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Messaging; using System.Threading; class CounterServer : Counter { public override void count() { for(int i=0; i<100; i++) { Console.Write(i + " "); Thread.Sleep(50); Console.WriteLine(); class ServerStartup { static void Main(string[] args) { Console.WriteLine ("ServerStartup.Main(): Server started"); HttpChannel chnl = new HttpChannel(1234); ChannelServices.RegisterChannel(chnl); RemotingConfiguration.RegisterWellKnownServiceType( typeof(counterserver), "CounterServer.soap", WellKnownObjectMode.Singleton); // the server will keep running until keypress. Console.ReadLine(); Arquitecturas Paralelas I 19 João Luís Sobral 2002

Resolução do Exercício 6 (continuação) // CounterClient.cs using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.Http; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Proxies; class CounterClient { delegate void CounterDelegate(); static void Main(string[] args) { HttpChannel channel = new HttpChannel(); ChannelServices.RegisterChannel(channel); Counter obj = (Counter) Activator.GetObject( typeof(counter), "http://localhost:1234/counterserver.soap"); Console.WriteLine("Client.Main(): Reference to rem.obj. acquired"); // execução sequencial obj.count(); obj.count(); // execução em paralelo CounterDelegate cdel1 = new CounterDelegate(obj.count); IAsyncResult svasy1 = cdel1.begininvoke(null,null); Console.WriteLine("Client.Main(): Invocation1 done"); CounterDelegate cdel2 = new CounterDelegate(obj.count); IAsyncResult svasy2 = cdel2.begininvoke(null,null); Console.WriteLine("Client.Main(): Invocation2 done"); cdel1.endinvoke(svasy1); Console.WriteLine("EndInvoke1 returned successfully "); catch (Exception e) { Console.WriteLine("EXCEPTION during EndInvoke1"); cdel2.endinvoke(svasy2); Console.WriteLine("EndInvoke2 returned successfully"); catch (Exception e) { Console.WriteLine("EXCEPTION during EndInvoke2"); // wait for keypress Console.ReadLine(); Arquitecturas Paralelas I 20 João Luís Sobral 2002