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



Documentos relacionados
Java Threads. Introdução

THREADS EM JAVA. George Gomes Cabral

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

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

Fundamentos de Programaçã. ção Concorrente

Universidade da Beira Interior. Sistemas Distribuídos

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

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

Universidade Federal da Paraíba

(Aula 17) Threads em Java

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

Programa de Computador que funciona em Rede

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

Java : Comunicação Cliente-Servidor.

PROCESSOS. Prof. Maicon A. Sartin

Threads Aula 04 2 Quadrimestre

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

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

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

Aula 30 - Sockets em Java

Threads. O que é uma Thread? Paralelismo

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

(Aula 15) Threads e Threads em Java

É a associação de mais de um fluxo de execução em um único processo.

Conexão Socket na MIDP

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

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

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

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

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

Programação Concorrente/Paralela em Java

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

Java. Marcio de Carvalho Victorino

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

Utilizando Threads em Java

Java RMI. Alcides Calsavara

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

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

Programação Concorrente

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

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

Mecanismo de Threads em Java 2

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

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

Capítulo 4. Packages e interfaces

Exercícios de Revisão Java Básico

CAPA PARA OS CABOS DA CABEÇA

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

Capítulo II Modelos de Programação Distribuída

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

Programação por Objectos. Java

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

Algoritmos e Programação II. Sobrecarga

BC0505 Processamento da Informação

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

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

Gestor de Processos Núcleo do Sistema Operativo

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 ...

Programação concorrente em Java

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

UNIVERSIDADE FEDERAL DE VIÇOSA DEPARTAMENTO DE INFORMÁTICA. JAVA NA PRÁTICA Volume II. Alcione de Paiva Oliveira Vinícius Valente Maciel

SISTEMAS DISTRIBUÍDOS

SO: Gerenciamento de Processos

Encapsulamento de Dados

Sistemas Operacionais

Redes de Computadores /1

Camada de Transporte. Bruno Silvério Costa

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

Introdução a Threads Java

Threads. Leonardo Gresta Paulino Murta

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

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

A BANDEJA PORTA-OBJECTOS

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo.

Implementando uma Classe e Criando Objetos a partir dela

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

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

Java Spaces Exemplos

Análise de Programação

Técnicas de Programação II

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

Programação II Java Streams. Christopher Burrows

Programação Orientada a Objetos em Java

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Sistemas Distribuídos

Programação por Objectos. Java

Mecanismos de Comunicação. Sockets em java (

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

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

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

Objetivo do programa: Implementação de um analisador de Logs do Servidor Web com base nos requisitos da unidade curricular de Estatística.

Concorrência em Java. Threads em Java

Transcrição:

Programação Orientada por Objectos com Java www.fe.up.pt/~aaguiar ademar.aguiar@fe.up.pt 1 Multithreading 154

Objectivos Ser capaz de: Explicar os conceitos básicos de multithreading Criar threads múltiplos Aplicar a palavra reservada synchronized Descrever o ciclo de vida de um thread Usar wait() e notifyall() 155 Conteúdos Threads múltiplos Trabalhador Prioridade de espera e de regresso Afectação Trabalhador Escalonamento pela JVM 156

O que é um Thread? Um thread é uma execução sequencial de um programa. Cada programa tem pelo menos um thread. Cada thread tem a sua própria pilha, prioridade e conjunto de registos virtuais. Os threads subdividem o comportamento de um programa em subtarefas independentes. 157 Onde é que se usam Threads? São usados virtualmente em todos os computadores: Em muitas aplicações (imprimir) Em programas como browsers Internet Em bases de dados No sistema operativo Os Threads são normalmente usados sem serem percebidos pelo utilizador. 158

Porque se devem usar Threads? Para melhor aproveitar as capacidades do computador (utilizar o CPU enquanto se faz entrada/saída de dados) Maior produtividade para o utilizador final (uma interface mais interactiva) Vantagens para o programador (simplificar a lógica aplicacional) 159 Os Threads são algo de novo? Não! Evolução: Utilizador único e sistemas em batch Sistemas multi-processo Sistemas multi-tarefa Sistemas multi-thread Sistemas multi-processador 160

A Classe Thread Mantém o estado de um thread Fornece diversos construtores Fornece diversos métodos Thread.currentThread() Thread.sleep() Thread.setName() Thread.isAlive() Escalonados pela JVM Utiliza o sistema operativo ou um package de threads 161 Exemplo de utilização de Thread Cada programa corre num thread. Adormecer um thread é uma técnica que permite que outros threads executem. public static void main (args[] s) { System.out.println("I am thread " + Thread.currentThread().getName()); try {Thread.sleep(5000) catch (InterruptedException e){ 162

Criação de um novo Thread 1. Criar a nova classe. a.definir uma subclasse de Thread. b.redefinir o seu método run(). 2. Instanciar e executar o thread. a.criar uma instância da classe. b.invocar o método start(). 3. O escalonador invoca o método run(). 163 Criar a Classe public class SleepingThread extends Thread { public void run () { Date starttime = new Date(); try {Thread.currentThread().sleep ((int) (1000 * Math.random())); catch (Exception es) { long elapsedtime = new Date().getTime() - starttime.gettime(); System.out.println( Thread.currentThread().getName() + ": I slept for " + elapsedtime + "milliseconds"); 164

Instanciar e Executar public static void main(string[] args) { new SleepingThread().start(); new SleepingThread().start(); System.out.println("Started two threads "); Started two threads Thread-1: I slept for 78 milliseconds Thread-2: I slept for 428 milliseconds 165 Acesso a Recursos partilhados Os dados podem ficar corrompidos se acedidos por vários threads: public class BankAccount { private double balance; public void withdraw(double amt) { balance -= amt; Utilizar a palavra synchronized para evitar conflitos de recursos partilhados. 166

Ciclo de Vida de um Thread New thread start() Ready to run sleep() wait() other Escalonado pelo JVM notify() Dead Running I/O block Blocked 167 Bloquear um Thread Utilizar wait() para bloquear o thread actual. O thread deve conter o monitor do objecto, ie, ser sincronizado (synchronized). O monitor será desbloqueado quando o wait() for invocado. O thread pode esperar indefinidamente ou por um período fixo de tempo. notifyall() acorda todos os threads bloqueados. 168

Métodos synchronized Se um thread invoca um método synchronized, nenhum outro thread pode executar um método sincronizado no mesmo objecto até o primeiro thread completar a sua tarefa. public class CheckOutFrame extends JFrame { public synchronized void updateelapsedtime() { public synchronized void computeaveragetime(date old) { 169 Métodos synchronized public class BankAccount { private double balance; public synchronized void withdraw(double amt) { balance -= amt; public synchronized void deposit(double amt) { balance += amt; 170

Cuidado com synchronized! Cuidado para evitar deadlocks, evitando que todos os métodos sejam synchronized. void FinishButton(ActionEvent e) { finished = true; while(elapsedtime == 0) { jtext.settext(" "); 171 Outra forma de criar Threads Implementar Runnable. Implementar o método run(). Criar uma instância da classe (objecto alvo). Criar uma instância do Thread, passando o objecto alvo como um parâmetro. Invocar start() no objecto Thread. O escalonador invoca run() sobre o objecto alvo. 172

Exemplo com Runnable public class MyApplet extends Applet implements Runnable{ private Thread t; public void startapplet(){ // called by browser t = new Thread(this); // creates a new // runnable Thread t.start(); // starts the new Thread public void run(){ // The new runnable Thread // calls run() and the // method runs in a // separate thread 173 Escalonamento e Prioridades Cada thread tem uma prioridade (1 to 10). O escalonamento é dependente do sistema operativo. Um thread de alta prioridade pode interromper um de baixaprioridade. Threads de alta prioridade podem dominar o processador. Threads de prioridade idêntica podem ser escalonados de forma circular. 174

Exemplo: Servidor de Ficheiros public class FileServer extends Thread { public static void main(string[] argv) { ServerSocket s; try { s = new ServerSocket(1234, 10); catch (IOException e) { System.err.println("Unable to create socket"); e.printstacktrace(); return; try { while (true) { new FileServer(s.accept()); catch (IOException e) { private Socket socket; FileServer(Socket s) { socket = s; start(); 148 Exemplo: Servidor de Ficheiros... public void run() { InputStream in; String filename = ""; PrintStream out = null; FileInputStream f; try { in = socket.getinputstream(); out = new PrintStream(socket.getOutputStream()); filename = new DataInputStream(in).readLine(); f = new FileInputStream(fileName); catch (IOException e) { if (out!= null) out.print("bad:"+filename+"\n"); out.close(); try { socket.close(); catch (IOException ie) { return; out.print("good:\n"); // send contents of file to client. 149

Fim 175