Praticando Concorr Ncia Em Java Sem Foros Marcos Brizeno

2248 palavras 9 páginas
Praticando concorrência em Java! – Semáforos | Marcos Brizeno

https://googleweblight.com/?lite_url=https://brizeno.wordpress.com/20...

Saiba mais

setembro 25, 2011

Praticando concorrência em Java! – Semáforos
Como falado no post anterior sobre concorrência em java, o problema do
Produtor/Consumidor pode ser resolvido utilizando um monitor que bloqueia o recurso, permitindo apenas um acesso de cada vez.
Desta vez vamos comentar um pouco sobre semáforos, que permitem um número maior de
Thread acessando os recursos.

Semáforos
Um semáforo é uma estrutura de dados que controle o acesso de aplicações aos recursos, baseando-se em um número inteiro, que representa a quantidade de acessos que podem ser feitos. Assim utilizamos semáforos para controlar a quantidade de acesso a determinado recurso. Na API do Java existe uma implementação de semáforos que fazem justamente esse controle. Vamos ver a seguir um exemplo que usa o Semáforo nativo do Java.

Utilizando semáforos
Primeiro vamos definir uma implementação de Thread que vai utilizar o semáforo.
1 public class ProcessadorThread extends Thread {
2 private int idThread;
3 private Semaphore semaforo;
4 public ProcessadorThread(int id, Semaphore semaphore) {
5 this.idThread = id;
6 this.semaforo = semaphore;
7}

1 de 17

10/06/2015 14:35

Praticando concorrência em Java! – Semáforos | Marcos Brizeno

https://googleweblight.com/?lite_url=https://brizeno.wordpress.com/20...

8}
9
Definimos inicialmente um identificador para a nossa Thread e uma referência a um semáforo que irá controlar o acesso a essas variáveis.
Agora vamos definir os métodos da nossa Thread, dentro da classe ProcessadorThread:
1 private void processar() {
2 try {
3 System.out.println("Thread #" + idThread + " processando");
4 Thread.sleep((long) (Math.random() * 10000));
5 } catch (Exception e) {
6 e.printStackTrace();
7}
8
}
Este método processar() apenas faz a thread dormir por algum tempo, simulando o efeito de um processamento longo.
1 private void

Relacionados