(Aula 17) Threads em Java



Documentos relacionados
(Aula 15) Threads e Threads em Java

THREADS EM JAVA. George Gomes Cabral

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

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

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

Java Threads. Introdução

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

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

Introdução a Threads Java

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

Universidade da Beira Interior. Sistemas Distribuídos

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

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

Universidade Federal da Paraíba

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

Programação Orientada a Objetos Threads

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

Introdução ao uso de Threads em Java

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal

Java : Comunicação Cliente-Servidor.

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

Sistemas Operacionais

Aula 30 - Sockets em Java

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

Padrões de Projeto. Singleton

Sistemas Operacionais

Threads. O que é uma Thread? Paralelismo

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

PROCESSOS. Prof. Maicon A. Sartin

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

Java. Marcio de Carvalho Victorino

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Revisão Ultima aula [1/2]

Computação Concorrente (MAB-117) Monitores

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

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

Sincronização de Processos (4) Monitores

Programação Concorrente

Java 2 Standard Edition Como criar classes e objetos

Sincronização. Cooperação entre Processos

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

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

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

Técnicas de Programação II

Threads Aula 04 2 Quadrimestre

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

2 Orientação a objetos na prática

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

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

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

Udesc/Ceplan Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Alexandre Veloso

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Programação concorrente em Java

Disciplina de Sistemas Distribuídos. Sincronização em SD. Prof. M.Sc. Alessandro Kraemer Kraemer

Is Event Dispatcher Threade (Animation)

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

processo internamente dadospara serem

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

Programação Concorrente/Paralela em Java

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Monitores. Setembro de Monitores

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Sistemas Operacionais Processos e Threads

Objetivos: Entender o funcionamento dos programas Java via linha de comando

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

Sobre a apresentação (About(

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Capítulo 8. Software de Sistema

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

1.6. Tratamento de Exceções

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

public void setdata(data d) { data = d;

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

Sistemas Operacionais I

Arquitetura de Sistemas Operacionais

Processos e Threads (partes I e II)

Programação por Objectos. Java

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

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Sistemas Operacionais

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

JSP - ORIENTADO A OBJETOS

JavaScript 2.0X X

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

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Transcrição:

(Aula 17) Threads em Java

Difícil As Threads thread threads de emjava classificar sãogerenciadaspelajvm. podemser com user criadasdas thread ou kernel Profa. Patrícia A seguintesmaneiras: Fazendo extend Implementandoa D. Criarum CostaLPRM/DI/UFES JVM daclassethread. nova sósuportaum JVM novo p/ rodaro processoemjava interface novo Runnable. 2processo implicaemcriaruma Sistemas Operacionais 2008/1 Java Threads

Especificação API JVM: Java MáquinaVirtual da linguagem Javade programação Java Componentes: Profa. Patrícia JVM: D. CostaLPRM/DI/UFES 3 Sistemas Operacionais 2008/1

Programas A independentes JVM Java compilados são bytecodes Carregador plataforma de execução da Verificador Interpretador JVM consiste de runtime classes de: (Class (Runtime verifier) loader) interpreter) Profa. Patrícia D. CostaLPRM/DI/UFES 4 Sistemas Operacionais 2008/1 JVM

Toda Do thread aplicação (sem considerar Java tem o pelo system menos thread) uma A começa thread. main ponto thread com de vista uma cria thread, do novas desenvolvedor, threads. chamada de o main programa Profa. Patrícia D. CostaLPRM/DI/UFES 5 Sistemas Operacionais 2008/1 Java Threads

Cada Duas classe thread: thread é associada com uma instância da Instanciando Thread. Delegando estratégicas possíveis para criar uma executor (high-level criação/gerência a classe Thread; concurrency da thread objects) para Profa. Patrícia D. CostaLPRM/DI/UFES 6 Sistemas Operacionais 2008/1 Java Threads (2)

A Passando fornecer da aplicação classe o Thread: um código que objeto cria a ser instância Runnable executado de para Thread na o thread. construtor deve Profa. Patrícia D. CostaLPRM/DI/UFES 7 Sistemas Operacionais 2008/1 public class HelloRunnable implements Runnable { Exemplo de criação de Thread em Java public void run() { System.out.println("Hello from a thread!"); public static void main(string args[]) { (new Thread(new HelloRunnable())).start();

Fazendo subclass de Thread (que também (2) Exemplo de criação de em Java implementa Runnable) public class HelloThread extends Thread { Profa. Patrícia D. CostaLPRM/DI/UFES System.out.println("Hello 8 from a thread!"); Sistemas Operacionais 2008/1 public void run() { public static void main(string args[]) { (new HelloThread()).start();

run(): start(): umathread. é tambémtermina. o métodoqueexecutaas Quandoestemétodofinaliza, atividadesde a sleep(intx): thread. antes métodoquedisparaa execuçãode uma dormirporx de Este terminar. métodoquecolocaa métodochamao milisegundos. métodorun( thread para ) Profa. Patrícia D. CostaLPRM/DI/UFES 9 Sistemas Operacionais 2008/1 Principais métodos da Classe Thread

10 join( interrupt( paraqualfoienviadaa ): métodoqueesperao mensagemparaser términodathread interrupted( liberada. de estáounãointerrompida. umathread. ): métodoqueinterrompea ): métodoquetestase umathread execução Profa. Patrícia D. CostaLPRM/DI/UFES 10 Sistemas Operacionais 2008/1 Principais métodos da Classe Thread

11 Estados da thread nascimento Término do tempo de dormida start( ) notify( ) pronta Profa. Patrícia D. CostaLPRM/DI/UFES 11 Sistemas Operacionais 2008/1 esperando dormindo morta bloqueada notifyall( ) wait( ) sleep( ) run( ) executando Alocar um processador E/S Fim do Método run( ) Fim da E/S

12 O Sessão controle de execução sessões críticas em Java é Thread garantido thread por um mecanismo de monitores execução; de código (RC) é executada por apenas uma tiver em que permissão, um deseja determinado executar região instante a RC, bloqueando pede tempo permissão entrada para para Profa. Patrícia http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html Se outras D. CostaLPRM/DI/UFES bloqueia não threads tiver até a liberar permissão (outra thread está executando), 12 Sistemas Operacionais 2008/1 Sincronização de Threads em Java

13 Hansen, Baseada na abordagem de Profa. Patrícia existe. mas sem garantias que uma que waitingthreadentraráno Portanto, um signal éapenas monitor! checar espera) indicação (para os processos uma D. estão CostaLPRM/DI/UFES Isto executar a condição esperando significa que o no estado antes que monitor. devem os começar desejado processos sempre a Monitores em Java 13 Sistemas Operacionais 2008/1

14 Todos Objetos Para monitores os e objetos classes Java possuem são potencialmente um lock intrínseco O fazer chamada a algum método um Profa. Patrícia A objeto lock compartilhado (monitor), deve-se obter o D. lock CostaLPRM/DI/UFES palavra mesmo de um synchronizedé para objeto métodos monitor de classe (static) 14usada (ou classe) para se Sistemas obter java Operacionais o 2008/1 Sincronização de Threads em Java (cont.)

15 Classe Objeto Bloco de código Granularidade de Sincronização Profa. Patrícia D. CostaLPRM/DI/UFES 15 Sistemas Operacionais 2008/1

16 Garante classe um (synchronized) (static que apenas method) método uma thread no escopo vai executar de uma Sincronização de Classe class Buffer { initialize { p = new Pilha(); Profa. Patrícia D. CostaLPRM/DI/UFES 16 Sistemas Operacionais 2008/1 private static Pilha p; public Buffer(){ syncronized static public void Insere( Object _o ) { p.push( _o ); syncronized static public Object Retira() { return p.pop();

17 Garante objeto um (synchronized) que apenas método uma thread no escopo vai executar de um Sincronização de Objeto class Buffer { Profa. Patrícia D. CostaLPRM/DI/UFES 17 Sistemas Operacionais 2008/1 syncronized public void Insere( Object _o ) { private Pilha p; public Buffer(){ p = new Pilha(); p.push( _o ); syncronized public Object Retira() { return p.pop();

18 Garante É garantir conjunto usado exclusão um que de objeto instruções apenas mútua auxiliar uma definidas thread (e.x. this) dentro vai executar para do bloco o Sincronização de Bloco class Buffer { Profa. Patrícia D. CostaLPRM/DI/UFES private Pilha p; public Buffer(){ p = new Pilha(); public void Insere( Object _o ) { syncronized(this) { p.push( _o ); syncronized public Object Retira() 18 Sistemas Operacionais 2008/1 { Object aux; syncronized(this) { aux = p.pop(); return aux;

19 Sincronização São exclusão usados mútua de objetos Bloco (interleave) auxiliares (métodos entre distintos independentes) métodos para evitar public class MsLunch { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Profa. Patrícia D. CostaLPRM/DI/UFES 19 Object(); Sistemas Operacionais 2008/1 public void inc1() { synchronized(lock1){ c1++; public void inc2() { synchronized(lock2){ c2++;

20 Uma Mas thread não está Permite com uma outra thread pode obter um lock que ela já Evita possui outro Profa. Patrícia D. mesma que método um uma método também thread (synchronized) cause o bloqueio chamar de si CostaLPRM/DI/UFES 20 Sistemas Operacionais 2008/1 Sincronização Reentrante

21 Usados Um guarded para coordenar block começa as ações perguntando das threads (polling) se Guarded Blocks uma condição é verdadeira // joy é uma variável compartilhada Profa. Patrícia D. CostaLPRM/DI/UFES 21 Sistemas Operacionais 2008/1 catch (InterruptedException e) { public synchronized guardedjoy(){ while(!joy){ try { wait(); /* bloqueia a thread até algum evento ser notificado. Note que pode ser qualquer evento, não necessariamente o que esperamos */ System.out.println("Joy and efficiency have been achieved!");

22 Sempre use wait dentro de um loop que testa a Mesmo condição esperada foi satisfeita (Abordagem de Hansen). esperando, Não assuma que a interrupção foi para a condição mesma específica que quando que pode o evento estávamos a ser thread que tenha ganhar a esperando condição sido o permissão que não estávamos seja de mais executar a Profa. Patrícia D. CostaLPRM/DI/UFES 22 Sistemas Operacionais 2008/1 Guarded Blocks (cont)

23 Quando Executar uma thread executa o.wait, ela precisa ter o Quando lock uma intrínseco do objeto o e suspende maneira uma o wait a thread simples execução dentro chama de de obter um o wait, método o lock a thread synchronized libera o é lock Profa. Patrícia D. CostaLPRM/DI/UFES 23 Sistemas Operacionais 2008/1 Wait

24 Uma esperando o.notifyall, outra por thread que aquele informa lock obtenha a todas que algo o as lock threads importante vai chamar que estejam Profa. Patrícia D. CostaLPRM/DI/UFES 24 Sistemas Operacionais 2008/1 aconteceu public synchronized notifyjoy(){ NotifyAll (cont.) joy = true; notifyall();

25 Exemplo dos Filósofos class DiningServer { private boolean checkstarving = false; private int numphils = 0; private int[] state = null; private static final int THINKING = 0, HUNGRY = 1, STARVING = 2, EATING = 3; Profa. Patrícia D. CostaLPRM/DI/UFES 25 Sistemas Operacionais 2008/1 private final int left(int i) { return (numphils + i - 1) % numphils; public DiningServer(int numphils, boolean checkstarving) { this.numphils = numphils; this.checkstarving = checkstarving; state = new int[numphils]; for (int i = 0; i < numphils; i++) state[i] = THINKING; System.out.println("DiningServer: checkstarving=" + checkstarving); private final int right(int i) { return (i + 1) % numphils;

26 Exemplo dos Filósofos (cont.) private void seeifstarving(int k) { if (state[k] == HUNGRY && state[left(k)]!= STARVING && state[right(k)]!= STARVING) { state[k] = STARVING; System.out.println("philosopher " + k + " is STARVING"); private void test(int k, boolean checkstarving) Profa. Patrícia D. CostaLPRM/DI/UFES 26 { Sistemas Operacionais 2008/1 if (state[left(k)]!= EATING && state[left(k)]!= STARVING && (state[k] == HUNGRY state[k] == STARVING) && state[right(k)]!= STARVING && state[right(k)]!= EATING) state[k] = EATING; else if (checkstarving) seeifstarving(k); // simplistic naive check for starvation

27 Exemplos public synchronized void takeforks(int i) { state[i] = HUNGRY; test(i, false); while (state[i]!= EATING) try {wait(); catch (InterruptedException e) { Profa. Patrícia D. CostaLPRM/DI/UFES public synchronized void putforks(int i) { state[i] = THINKING; test(left(i), checkstarving); test(right(i), checkstarving); notifyall(); 27 Sistemas Operacionais 2008/1