Utilização de threads em Java



Documentos relacionados
Threads. O que é uma Thread? Paralelismo

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

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

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

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

Java Threads. Introdução

(Aula 17) Threads em Java

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

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

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

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

Programação concorrente em Java

Concorrência em Java. Threads em Java

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo 6 - Threads

THREADS EM JAVA. George Gomes Cabral

Diagrama de Seqüência

Conceitos e Implementação de um Sistema Concorrente Orientado a Objeto

SISTEMA/MÓDULO: SYSMO S1 / LOGÍSTICA - WMS LIBERAÇÃO DE PRODUTOS VERSÃO: 1.00 DATA: 25/11/2006

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

13/09/2011. Atividades. Aula 5: REDE PERT/CPM PRINCÍPIOS DO PERT-CPM

Fundamentos de Programaçã. ção Concorrente

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

Termo genérico que se aplica a vários tipos de diagramas que enfatizam interações de objetos.

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

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

Processo de Aquisição de Livros 2015: tutorial para pedidos no Sistema Sophia

Executivo Cíclico. Executivo Cíclico Introdução. Sistemas de Tempo Real: Executivo Cíclico Introdução. Executivo Cíclico Exemplo

Desenvolvimento guiado por testes e ferramentas xunit

Entrada e Saída Transmissão Serial e Paralela

Programação em FORTRAN V. João Manuel R. S. Tavares

Sincronização de Threads

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs Aplicações dinâmicas para a Web: HTTP porto 80

Orientação a Objetos

Programação Concorrente

PRESIDÊNCIA DO GOVERNO REGIONAL Resolução do Conselho do Governo n.º 142/2011 de 11 de Novembro de 2011

Switch switch switch switch switch variável_inteira valor1 valor2 switch variável_inteira case case break switch case default default switch switch

Monitores. Programação Concorrente September 11, 2012

LINGUAGEM JAVA - RESUMO

Escalonamento de Processos

Fundamentos de Arquitetura e Organização de Computadores

Teste de Funções por Cobertura do Grafo de Fluxo de Controle

TUTORIAL MATLAB Victor Breder 2016

}Escalonamento. Parte III - Sistemas Operacionais. Cap. 2 Processos. Escalonamento de Processos. Quando escalonar? Comportamento de Processos

Programação de Computadores I Estruturas de Repetição PROFESSORA CINTIA CAETANO

MANUAL DO SISTEMA. Versão 6.00

Programação de Computadores I. Linguagem C Função

2) Em relação aos algoritmos de sincronização de relógios:

Programação concorrente usando threads POSIX e Java

Estrutura de repetição do/while

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

alocação de custo têm que ser feita de maneira estimada e muitas vezes arbitrária (como o aluguel, a supervisão, as chefias, etc.

Presys Instrumentos e Sistemas

Gerenciamento de Memória Minix 3.1.7

Serviço de Edição e Informação Técnico-Científica/abril 2012 SISTEMA DE INFORMAÇÃO DO CÂNCER (SISCAN)

Admistração de Redes de Computadores (ARC)

Solicitação de Eventos Planejamento Replanejamento

Programação Orientada a Objetos Threads

Programação Orientada a Objeto Java

Estruturas de Repetição

Sistemas Distribuídos Aula 3

1. PSTAW10 COAFI - OCORRÊNCIAS

Introdução ao uso de Threads em Java

Guia Rápido de Instalação

SISTEMAS DE INFORMAÇÕES GEOGRÁFICAS I (GEO 01007) AULA 8

Microcontroladores e Microprocessadores. Conversão de Bases Prof. Samuel Cavalcante

Gerenciamento de dispositivos móveis

Manual de Processo de Licitações

SIMULADO TRADICIONAL OAB 1ª FASE - XV EXAME - VIA WEB

Arquitetura de Computadores - Operação da Unidade de Controle. por Helcio Wagner da Silva

3 Informações para Coordenação da Execução de Testes

Sistema Operacional. Implementação de Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Capítulo 5: Repetições

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Conceitos Básicos

COMO ESTÁ A IDENTIDADE VISUAL DA SUA EMPRESA?

Metodologias de Programação

Os conceitos aprendidos são fundamentais, essenciais para escrever um programa macro. Mas o que é um programa macro?

Transcrição:

Universidade Federal do Rio de Janeiro IM/DCC Utilização de threads em Java Prof. Austeclynio Pereira e-mail: austeclyniop@posgrad.nce.ufrj.br Ciclo de vida de uma thread nascimento start notify notifyall pronta yield termina E/S wait tempo expira sleep em execução end inicia E/S esperando dormindo morta bloqueada

Criando threads em Java Existem duas maneiras possíveis para criarmos threads em Java: Estendendo a class Thread. Implementando a interface Runnable. Criando threads em Java estendendo a class Thread O start() faz com que a Java Virtual Machine invoque o método run da Thread.

Criando threads em Java implementando a interface Runnable Utilizando threads em Java Alguns métodos da classe Thread: run() deve estar presente em todas as threads. start() Registra a thread no thread scheduler. getname()/setname() Atribui ou retorna o nome de uma thread. Por default as threads são nomeadas numericamente. yield() Faz com que a thread corrente pause, possibilitando que outra thread seja despachada.

Utilizando threads em Java Alguns métodos da classe Thread: sleep() Faz com que a thread fique em estado de espera uma quantidade mínima de tempo, em ms, possibilitando a CPU executar outras threads. interrupt() Atribui à thread o estado de interrompível. isinterrupted() Verifica se foi atribuído à thread o estado de interrompível. Utilizando threads em Java Alguns métodos da classe Thread: getpriority()/setpriority() Atribui ou retorna a prioridade de despacho de uma thread. join() Condiciona a continuação da execução de uma thread ao término de uma outra.

Utilizando threads em Java Alguns métodos da classe Object: wait() Utilizado para sincronizar acesso a um objeto. Coloca a thread corrente em estado de espera até que outra thread chame os métodos notify ou notifyall liberando o objeto. notify() Acorda a thread que, voluntariamente, estava esperando a liberação de um objeto. notifyall() Acorda todas as threads que estavam esperando a liberação de um objeto. Quando duas threads precisam utilizar ao mesmo tempo um objeto existe a possibilidade de haver corrupção de dados. As seções de um programa que têm o potencial de provocar este dano são chamadas de regiões críticas. Para evitar esta situação, o acesso por estas regiões críticas deve ser sincronizado. As threads devem estabelecer um acordo de forma que antes que qualquer instrução de uma região crítica seja executada um lock do objeto deve ser adquirido.

Estando o objeto locked qualquer outra thread fica impossibilitada de acessá-lo até que o objeto fique liberado(unlocked). Cada objeto tem seu próprio lock. O lock pode ser adquirido ou liberado através do uso de métodos ou instruções synchonized. O objeto fica atomicamente bloqueado quando o seu método synchronized é invocado. A sincronização força com que as execuções de duas ou mais threads sejam mútuamente exclusivas no mesmo espaço de tempo. O lock é automaticamente liberado assim que o método synchronized termina.

Método synchronized Adquire lock Espera para adquirir o lock Adquire lock Libera o lock Libera o lock Método synchronized

synchonized Statements Permite que a sincronização seja feita apenas em uma porção do código. Como a sincronização afeta a performance, este processo é mais eficaz. Com synchronized statements somente fica locked o absolutamente necessário. Sintaxe: synchonized (objeto que será locked) { statements }

O mecanismo de sincronização é suficiente para evitar que as threads interfiram umas com as outras, mas pode ocorrer a necessidade de as threads se comunicarem. Os métodos wait(), notify() e notifyall() têm o propósito de permitir a comunicação entre as threads. O método wait() faz com que a thread fique em estado de espera até que determinada condição aconteça. Os métodos notify() e notifyall() informam às threads, em estado de espera, que alguma coisa ocorreu e que pode satisfazer àquela condição. Formas de uso: wait() synchronized void facaquandocondicao() { while (!condicao) { try{ wait(); } catch(interruptedexception e) {} } instruções quando a condição for verdadeira }

Formas de uso: notify(); notifyall: synchronized void trocacondicao() { troca os valores usados para o teste da condição notifyall(); // ou notify() } O método que testa a condição precisa ser synchronized pois ninguém pode garantir que após o while a condição já foi alterada por outra thread. O wait() suspende a execução da thread e libera o lock do objeto. Quando a thread é reiniciada o lock é readquirido. O teste da condição deve estar sempre em loop. Nunca podemos assumir que se fomos notificados implica em condição satisfeita. Não podemos trocar o while por um if.

Bibliografia The Java Programming Language 3 rd Edition Ken Arnold, James Gosling, David Holmes Murach s Beginning Java 2 Andrea Steelman