LinkedBlockingQueue

3 respostas
S

Olá, estou precisando de uma ajuda com LinkedBlockingQueue. Estou utilizando uma lista em uma thread, quando um elemento é inserido nessa lista só então a thread é ativada, é mais ou menos assim:

public class TesteList extends Thread {

	TesteList() {
		LinkedBlockingQueue<Integer> list = new LinkedBlockingQueue<Integer>(10)
		this.start();
	}
	
	public void run() {
		list.take();
		....
	}
}

Bom estou precisando que faça a mesma coisa, só que quando receber um elemento nessa fila não removesse e sim somente continuasse a thread, pois o take aguarde e remove depois de receber. Verificando a documentação de LinkedBlockingQueue não encontrei nada relacionado. Alguém teria alguma sugestão?

3 Respostas

E

Você pode usar um loop com peek + Thread.sleep.

S

Poderia exemplificar?

T

Algo parecido com isto aqui:

Integer obj;

while ((obj = list.peek()) == null)  {
    Thread.sleep (1); 
}

Rapaz - por que é que você não quer remover o objeto? Isso pode dar alguns problemas de sincronização, eu acredito.

Criado 5 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 3
Participantes 3