Métodos Sincronizados

Documentos relacionados
Programação Concorrente Benito Fernandes Fernando Castor João Paulo Oliveira Weslley Torres

Controle de Concorrência

Programação Concorrente

Controle de Concorrência

Boas Práticas de Programação Concorrente

Métodos Sincronizados

Comunicação entre Processos

Sistemas Distribuídos Aula 7

Fundamentos de Sistemas Operacionais

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

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

Sistemas Operacionais: Sincronização entre processos

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5)

Programação Orientada a Objetos Threads

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

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

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

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

Programação concorrente em Java

INE5645 PROGRAMAÇÃO PARALELA E DISTRIBUÍDA - Prova 1 12/05/2014 Aluno: Bosco

Unidade 3. Controle de Concorrência. Primitivas de Programação Concorrente Clássica

Sincronização e Comunicação entre Processos

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

Programação Concorrente em Java

Threads. O que é uma Thread? Paralelismo

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

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

Monitores. Programação Concorrente September 11, 2012

Sincronização e comunicação entre processos

Monitores. Paulo Sérgio Almeida. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

1B Conceitos Básicos: Indique Verdade/Falso

Programação Orientada a Objetos. Concorrência

Sincronização de Threads

Comunicação entre processos (2)

Programação concorrente (processos e threads)

Sistemas Distribuídos Aula 5

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Sistemas Operacionais. Prof. André Y. Kusumoto

Exclusão Mútua (mutex)

Programação Orientada a Objetos

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex)

Sistemas Distribuídos e Paralelos

Sistemas Operacionais II

Programação Concorrente e Paralela

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

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída)

Sincronização. Objectivos da aula de hoje

Coleções. João Paulo Q. dos Santos

Monitores. Setembro de Monitores

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 6. Primitivas de Sincronização

Sistemas Operacionais

SSC0640 Sistemas Operacionais I

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

Mecanismos de Sincronização com Variáveis Compartilhadas

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

TAREFAS COORDENAÇÃO ENTRE TAREFAS AULA 09 Sistemas Operacionais Gil Eduardo de Andrade

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Utilização de threads em Java

Fundamentos de Sistemas Operacionais

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Capítulo 6: Sincronização de Processos. Operating System Concepts 8th Edition

OO Engenharia Eletrônica

Sincronização de Processos (2)

Desenvolvimento de Aplicações Distribuídas

Sistemas Distribuídos Aula 3

A classe ArrayList. IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

Sistemas Operacionais. Prof. André Y. Kusumoto

Sincronização de Processos (2)

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios. Aula 06.

Memória Transacional. Programação Concorrente 2012

Unidade III Gerência de Processos

Sincronização e Comunicação

Sistemas de Computação. Threads e Sincronização

Sistemas Operacionais. Condição de corrida e Região crítica

Informática UFRGS. Threads. Programação com Objetos Distribuídos (C. Geyer) C# Threads V5 1

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Estrutura de Dados Listas

Vamos fazer um pequeno experimento

Sistemas Operacionais

Sincronização e Comunicação entre Processos. Adão de Melo Neto

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

1 Porque o estado de um processo deve ser salvo quando ele deixa a CPU?

revisão Controle de Concorrência com Locks Bancos de Dados I 2015/02

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

Threads. Pedro Cruz. EEL770 Sistemas Operacionais

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

Sincronização no Kernel

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

Roteiro. Noções de Controle de Concorrência. BCC321 - Banco de Dados I. Ementa. Finalidade do Controle de Concorrência.

Programação Orientada a Objetos

Fundamentos de Sistemas Operacionais

Aula 03. Evandro Deliberal

Tema 7. Colecções AULA TEÓRICA 6. Listas: ArrayList, LinkedList, Vector Ø Criação Ø Manipulação

Concorrência entre Processos

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

Técnicas Avançadas de Programação

Transcrição:

Programação Paralela e Distribuída Ordenação e Sincronização em Java Prof. Msc. Marcelo Iury de Sousa Oliveira marceloiury@gmail.com http://sites.google.com/site/marceloiury/ Métodos Sincronizados Todo objeto com métodos synchronized tem um monitor. Os monitores não podem ser acessados diretamente pela aplicação. Os monitores são acessados por: Métodos synchronized Blocos synchronized 1

Métodos Sincronizados Um método é definido como synchronized, o mesmo precisa obter o monitor associado ao objeto para executar. Os métodos não synchronized não requerem o monitor, e por isso, podem ser chamados a qualquer momento. Métodos Sincronizados Os métodos synchronized possuem acesso exclusivo ao dado encapsulado pelo objeto, se o dado é acessado apenas por métodos synchronized. 2

Métodos Sincronizados Block Synchronization Blocos sincronizados são blocos rotulados como synchronized A palavra chave synchronized recebe como parâmetro um objeto que possui o monitor a ser adquirido 3

Block Synchronization Esperando e Notificando Métodos para bloqueio e desbloqueio em java: notify() notifyall wait() wait(long) wait(long,int) 4

Esperando e Notificando Métodos wait bloqueam a thread que o chama libera o monitor associado ao objeto Métodos notify acordam uma thread. Não liberam o monitor Não necessariamente executam de imediato Interface ReadWriteLock Possui dois Locks: readlock(): para acesso compartilhado de threads com direito de leitura (acesso) writelock(): para acesso exclusivo de uma thread com direito de escrita (modificação) Implementada por ReentrantReadWriteLock Por default não garante a ordem de liberação nem preferência entre leitores e escritores Ordenação FIFO é garantida passando o valor true para o construtor da classe 5

Classe ReentrantReadWriteLock Ex: Classe Conta com ReentrantReadWriteLock Conditions Locks podem ser associados a condições de acesso usando a classe Condition Seu uso é mais flexível que em monitores Condição deve ser associada a um Lock Criada com o método newcondition() de Lock Principais métodos: await(): aguarda condição ser alterada; tempo limite de espera pode ser estipulado signal(): sinaliza que houve alteração da condição, tirando uma thread da fila signalall(): retira todas as threads da fila 6

Exemplo de Conditions Part.1 Exemplo de Conditions Part. 2 7

E para os casos que os recursos podem ser ocupados por mais de um processo/thread? Semaforos Permite controlar o número de acessos simultâneos a um dado ou recurso Métodos da classe Semaphore Semaphore(int acessos [, boolean ordem]): construtor; parâmetros definem o número de acessos simultâneos possíveis e se a ordem de liberação de threads em espera será FIFO acquire(): solicita acesso a um dado ou recurso, entrando em espera se todos os direitos it de acesso estiverem sendo usados release(): libera um direito de acesso 8

Exemplo de Semaforos Outras facilidades de concorrência em Java 9

Concorrência na API Java Algumas classes da API Java controlam a concorrência internamente thread safe Ex.: Vector, Hashtable,... Outras classes são não fazem o controle São thread unsafe, ou seja, não garantem a sua consistência se usadas por várias threads Estas classes são em geral mais rápidas, pois controle de concorrência reduz o desempenho Classes thread unsafe devem ser protegidas se forem usadas por mais de uma thread Ex.: componentes do Swing, LinkedList,... Collections.sychronizedXXX(Collection thread unsafe) Interface BlockingQueue<E> Fornece métodos para acesso a uma fila de elementos genérica que bloqueia automaticamente se alguma condição impedir o acesso Principais métodos: put() coloca elemento na fila, aguardando se ela estiver cheia take() retira o elemento da fila, aguardando se ela estiver vazia remainingcapacity() informa o número de lugares restantes na fila 10

Implementações de BlockingQueue ArrayBlockingQueue: array bloqueante DelayQueue: fila na qual um elemento só pode ser retirado após seu delay expirar LinkedBlockingQueue: fila encadeada bloqueante PriorityBlockingQueue: fila bloqueante com acesso aos elementos em ordem de prioridade SynchronousQueue: cada put() é sincronizado com um take() Pacote java.concurrent.atomic O pacote java.util.concurrent.atomic fornece classes thread safe equivalentes a alguns tipos de dados do Java: AtomicBoolean AtomicInteger e AtomicIntegerArray AtomicLong e AtomicLongArray AtomicReference e AtomicReferenceArray etc. 11

Pacote java.concurrent.atomic Exemplos de métodos: get(), set(): retorna/altera valor atomicamente compareandset(): compara o valor e, caso seja igual, o modifica getandadd(): retorna valor atual e adiciona addandget(): adiciona e retorna novo valor getanddecrement(), getandincrement(): retorna valor atual e decrementa/incrementa decrementandget(), incrementandget(): decrementa/incrementa e retorna novo valor 12