Oi pessoal,
Estou criando um pool de threads que não permite que elementos considerados iguais estejam ativos ao mesmo tempo.
Na verdade estou utilizando o pool provido pela API padrão do java, e adicionando somente este tratamento de exclusividade.
Aliás se alguém souber que isso já existe pronto na API padrão, por favor não me deixem ficar aqui reinventando a roda.
Mas o que estou fazendo é simples. Por exemplo, minha classe tem o seguinte método:
public void executar(Runnable r){
//primeiro verifica se este Runnable já está ativo no pool
//se não estiver, adiciona ao pool da sun
//se estiver ativo, não faz nada
}
Como esta classe faz para saber se um Runnable já está ativo?
Simples. A classe que implementa Runnable tem que implementar os métodos equals e hashcode tbm.
Assim eu posso utilizar uma coleção de Runnables que eu posso consultar, a qualquer instante, para saber se um determinado Runnable está ativo.
Chegamos então à minha pergunta:
Qual coleção utilizar para manter esta lista de Runnables?
Atualmente estou utilizando um HashSet. Também pensei em ArrayList.
Acho que esta pergunta se resume ao seguinte: Qual das coleções é mais rápida nas operações de add, remove e contains?