Como colocar uma thread em uma fila, uma lista?

4 respostas
S

Ola!

Estou fazendo um trabalho para a faculdade com o uso de locks. O problema é basicamente o seguinte: tenho 10 threads que representam turistas; estes turistas devem fazer 3 tipos de atividades: andar de esqui, andar de banana boat, e andar de lancha. Para fazer qualquer uma destas atividades, eles devem usar 1 colete cada, mas existemm apenas 6 coletes. Escolhida a atividade, uma lancha deve ser alocada (existem apenas 2 lanchas para as 3 atividades). As atividades passeio de lancha e passeio de banana boat só podem ser feitos de 4 em 4 turistas.

Resumindo, os recursos são:

  • 6 coletes;
  • 2 lanchas;
  • 1 esqui;
  • 1 banana boat.
  • e os 10 turistas

Minha dificuldade está em deixar threads em espera até que 4 threads escolham a mesma atividade (passeio de banana boat ou de lancha).

Alguém pode me ajudar?

4 Respostas

biozit

acho mais facil vc usar o timertask

import java.util.Timer;
import java.util.TimerTask;

public class Agendador extends Timer {
private int inicio;

public Agendador(int inicio) {
	super();
	this.inicio=inicio;
}

public void iniciar(){
	this.schedule(new Tarefa(), 0, 500);
}

public void parar(){
	System.out.println("Cancelando tarefa...");
	super.cancel();
	System.out.println("Tarefa cancelada");
}

private class Tarefa extends TimerTask{
	@Override
	public void run() {
		System.out.println("Valor: " + inicio);
		inicio++;			
	}
}

}

eduveks

Cria pra cada Thread um getStatus… onde vc retorna o estado do lock…

Por exemplo:

0 se a thread ainda não iniciou
1 se esta rodando
2 se terminou e esta parada…

Depois é só ir verificando o status de cada thread e ir tratando cada situação…

S

Na verdade, eu já fiz o programa, mas ele está apresentando alguns problemas.
O passeio com o esqui funciona ok, mas o passeio de lancha e o de banana boat, que é necessário ter 4 threads para ser feito, dá problema.
Uso uma Condition para fazer a alocação de lugar, e funciona, mas a quarta thread que entra pega um lugar, não fica na fila, aloca a lancha para o passeio e dá o signalAll para as que estão na fila esperando … o problema é que elas continuam lá … ai o programa tranca

S

se alguem quiser ver … tá em anexo

é um projeto do Netbeans 5.0

e tá configurado pra só escolher a atividade banana boat …

Criado 6 de dezembro de 2006
Ultima resposta 6 de dez. de 2006
Respostas 4
Participantes 3