| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/11/2008 18:13:45
|
Dieval Guizelini
Virtual Machine Man
![[Avatar]](/images/avatar/9fc92b9c69b711dcb880ccb743fc6f06.jpg)
Membro desde: 05/07/2006 14:39:44
Mensagens: 570
Localização: Curitiba - PR
Offline
|
Senhores,
estou com um problema no código abaixo:
Gerando a exception:
Exception in thread "Thread-9" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
at java.util.Vector.remove(Vector.java:777)
at br.ufpr.sibila.Executores.getAcao(Executores.java:2 
Alguém tem alguma sugestão?
vw
|
Sun Certified Java Programmer 5.0 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2008 19:56:41
|
jdefarge
Thread.start()
Membro desde: 13/11/2007 00:15:18
Mensagens: 44
Offline
|
Bem, vamos por partes:
0. Eu não usuaria o batido padrão "final static int". Basta usar um enum por questões de segurança e confiabilidade:
1. Em primeiro lugar vc deve colocar a variável "executando" como volatile, pois assim vc evita problemas com cache nessa variável flag em ambiente de concorrência:
2. A classe Vector é um tipo legado. É aconselhável que vc utilize:
3. Ou então pelo que eu entendi vc tá implementando uma fila concorrente blocante. Então por que não utilizar java.util.concurrent.LinkedBlockingQueue ao invés do malhado Vector? Teu código vai ficar mais suncito, tipo assim:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2008 20:01:49
|
jdefarge
Thread.start()
Membro desde: 13/11/2007 00:15:18
Mensagens: 44
Offline
|
Digo, "sucinto".
Na verdade, vc poderia usar também java.util.concurrent.ArrayBlockingQueue (que será até mais rápido para algumas operações) ao invés do java.util.concurrent.LinkedBlockingQueue.
Testa e vê se dá certo. Também dá uma olhada no framework Executors do java.util.concurrent. Acho que dá pra simplificar ainda mais!
This message was edited 1 time. Last update was at 05/11/2008 20:03:28
|
|
|
 |
|
|
|
|