Java Threads. Introdução



Documentos relacionados
THREADS EM JAVA. George Gomes Cabral

Threads. O que é uma Thread? Paralelismo

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

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

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

Fundamentos de Programaçã. ção Concorrente

Universidade da Beira Interior. Sistemas Distribuídos

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

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

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

Programação Concorrente

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

Universidade Federal da Paraíba

(Aula 17) Threads em Java

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação Orientada a Objetos (DPADF 0063)

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

Exercícios de Revisão Java Básico

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

Java. Marcio de Carvalho Victorino

Algoritmos e Programação II. Sobrecarga

Programação por Objectos. Java

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

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

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

Análise de Programação

(Aula 15) Threads e Threads em Java

Concorrência em Java. Threads em Java

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

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

Java : Comunicação Cliente-Servidor.

PROCESSOS. Prof. Maicon A. Sartin

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Aula 3 Objeto atual com referencia THIS e Classes com Herança

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

Threads Aula 04 2 Quadrimestre

Programação Concorrente Conceitos Multiprogramação Threads

Java 2 Standard Edition Como criar classes e objetos

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

Introdução a Threads Java

Capítulo 8. Introdução UML

Introdução ao uso de Threads em Java

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

Implementando uma Classe e Criando Objetos a partir dela

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

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

Programação por Objectos. Java

SISTEMAS DISTRIBUÍDOS

BC0505 Processamento da Informação

Módulo 07 Características Avançadas de Classes

Encapsulamento de Dados

Mecanismo de Threads em Java 2

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

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

Prof. Jhonatan Fernando

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

Orientação a Objetos e a Linguagem Java

Programação por Objectos. Java

Unidade IV: Ponteiros, Referências e Arrays

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Programação Orientada a Objetos Threads

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

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

FBV - Linguagem de Programação II. Um pouco sobre Java

Desenvolvimento OO com Java Orientação a objetos básica

Sistemas Distribuídos: Conceitos e Projeto Java RMI

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

Orientação a Objetos com Java

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

Engenharia da Programação Problemas (2002/2003)

A Linguagem Java. Alberto Costa Neto DComp - UFS

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

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

Programação Visual TIC - 3PA. Lista de Exercícios 02

Invocação de Métodos Remotos

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Programação com Posix Threads

Reuso com Herança a e Composiçã

Técnicas de Programação II

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Análise e Projeto Orientados por Objetos

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

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

Sobre o Professor Dr. Sylvio Barbon Junior

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Transcrição:

Java Threads mleal@inf.puc-rio.br 1 Introdução O único mecanismo de concorrência suportado explicitamente pela linguagem Java é multi-threading. threading. Os mecanismos de gerenciamento e sicronização de threads foram incorporados diretamente à linguagem (java.lang). Um thread Java é representado por um objeto da classe Thread (java.lang.thread). mleal@inf.puc-rio.br 2

Introdução Quando uma aplicação Java é executada: A JVM cria um objeto do tipo Thread cuja tarefa a ser executada é descrita pelo método main(). O Thread é iniciado automaticamente. Os comandos descritos pelo método main() são executados sequencialmente até que o método termine e o thread acabe. mleal@inf.puc-rio.br 3 Criando Threads Existem duas formas de criar explicitamente um thread em Java: Estendendo a classe Thread e instanciando um objeto desta nova classe. Implementando a interface Runnable,e passando um objeto desta nova classe como argumento do construtor da classe Thread. Nos dois casos a tarefa a ser executado pelo thread deverá ser descrita pelo método run(). mleal@inf.puc-rio.br 4

Exemplo Estendendo Thread public class SimpleThread extends Thread { private String myname; public SimpleThread(String str) { myname = str; public void run() { // Código executado pelo thread for (int i = 0; i < 10; i++) System.out.println(i + " " + myname; System.out.println("DONE! " + myname; // fim mleal@inf.puc-rio.br 5 Exemplo Estendendo Thread Para iniciar o thread é necessário instanciar um objeto da nova classe e invocar o método start() : public class ThreadDemo { public static void main (String[] args) { (new SimpleThread( thread 1")).start(); (new SimpleThread( thread 2")).start(); mleal@inf.puc-rio.br 6

A Interface Runnable Como Java não permite herança múltipla, a necessidade de estender a classe Thread restringe a criação de subclasses a partir de outras classes genéricas. Através da utilização da interface Runnable é possível criar classes que representem um thread sem precisar estender a classe Thread. Neste caso pode-se estender outras classes genéricas. A criação de um novo thread é feita através da instanciação de um objeto thread usando o objeto que implementa a interface Runnable. mleal@inf.puc-rio.br 7 Exemplo Implementando Runnable class BasicThread2 implements Runnable{ // método que descreve o código a ser // executado pelo thread public void run() {... class Teste{ public static void main(){ // Cria um objeto que possui um método run() Runnable runnable = new BasicThread2(); // Cria um novo thread usando um objeto runnable Thread thread = new Thread(runnable); // inicia o thread thread.start();... mleal@inf.puc-rio.br 8

Exemplo Implementando Runnable public class Clock extends Applet implements Runnable { private Thread clockthread = null; public void start() { if (clockthread == null) { clockthread = new Thread(this, "Clock"); clockthread.start(); public void run() { Thread mythread = Thread.currentThread(); while (clockthread == mythread) { repaint(); try { Thread.sleep(1000); catch (InterruptedException e){... mleal@inf.puc-rio.br 9 Controlando a Execução start() Inicia a execução do thread (só pode ser invocado uma vez). yield() Faz com que a execução do thread corrente seja imediatamente suspensa,, e outro thread seja escalonado. sleep(t) Faz com que o thread fique suspenso por t segundos. wait() Faz com que o thread fique suspenso até que seja explicitamente reativado por um outro thread. mleal@inf.puc-rio.br 10

Ciclo de Vida de um Thread mleal@inf.puc-rio.br 11 Estado Non-Runnable Um thread pode entrar no estado non- runnable como resultado de: a execução pelo thread de uma chamada de I/O bloqueante. a invocação explícita dos métodos sleep() ou wait() do objeto Thread. O método yield() não torna o thread non- runnable, apenas transfere a execução para outro thread. mleal@inf.puc-rio.br 12

Escalonamento Mecanismo que determina como os threads irão utilizar tempo de CPU. Somente os threads no estado runnable são escalonados para ser executados. Java permite a atribuição de prioridades para os threads. Threads com menor prioridade são escalonados com menor frequência. Os threads são escalonados de forma preempetiva seguindo uma disciplina round robin. mleal@inf.puc-rio.br 13 Prioridades Todo thread possui uma prioridade que: pode ser alterada com setpriority(int p) pode ser lida com getpriority() Algumas constantes incluem: Thread.MIN_PRIORITY Thread.MAX_PRIORITY Thread.NORM_PRIORITY o padrão é Thread.NORM_PRIORITY mleal@inf.puc-rio.br 14

Sincronização Cada thread possui uma pilha independente dois threads que executam o mesmo método possuem versões diferentes das variáveis locais. A memória dinâmica (heap) de um programa é compartilhada por todos os threads dois threads poderão portanto acessar os mesmos atributos de uma objeto de forma concorrente. Devido ao mecanismo de preempção, não há como controlar o acesso a recursos compartilhados sem um mecanismo específico de sincronização. mleal@inf.puc-rio.br 15 Exemplo public class ContaCorrente { float saldo = 0; float tmp; public float getsaldo(){ return saldo; public void depositar(float valor){ tmp = getsaldo(); saldo = tmp+valor; public void sacar(float valor){ tmp = getsaldo(); saldo = tmp-valor; mleal@inf.puc-rio.br 16

Exemplo Considere dois threads acessando uma mesma conta simultaneamente, um invocando o método depositar e outro o método sacar. Thread 1 Thread 2 saldo --- --- 0 conta.depositar(100); --- 0 tmp = saldo; --- 0 --- conta.sacar(50); 0 --- tmp = conta; 0 --- 0 saldo = tmp - 50; -50 saldo = tmp + 100; --- 100 mleal@inf.puc-rio.br 17 Sincronização Java pemite restringir o acesso a métodos de um objeto ou trechos de código através do modificador synchronized. Cada objeto Java possui um (e apenas um) lock. Para invocar um método synchronized é necessário adquirir (implicitamente) o lock associado ao objeto. Se dois ou mais métodos de um objeto forem declarados como synchronized,, apenas um poderá ser acessado de cada vez. mleal@inf.puc-rio.br 18

Exemplo public class ContaCorrente { float saldo = 0; float tmp; public float getsaldo(){ return saldo; public synchronized void depositar(float valor){ tmp = getsaldo(); mleal@inf.puc-rio.br 19 wait() e notifyall() O mecanismo de sincronização de Java é baseado em monitores, e utiliza uma variável condicional que é o próprio lock do objeto. As operações wait(cond) e signal(cond) usada em monitores são representadas em Java pelos métodos wait() e notifyall(). wait() e notifyall()só podem ser usados dentro de métodos ou trechos de código synchronized, e não recebem parâmetros, já que atuam sobre o lock do objeto. mleal@inf.puc-rio.br 20

wait() e notifyall() Threads podem ser suspensos ao executarem o comando wait(). Ao ser suspenso dentro de um método synchronized, o thread libera imediatamente o lock do objeto correspondente. O thread suspenso só será reativado quando um outro thread executar o comando notifyall(). Vários threads podem estar suspensos a espera do lock de um objeto. mleal@inf.puc-rio.br 21 Exemplo class BlockingQueue extends Queue { public synchronized Object remove() { while (isempty()) { wait(); // this.wait() return super.remove(); public synchronized void add(object o) { super.add(o); notifyall(); // this.notifyall() mleal@inf.puc-rio.br 22