Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Thread - Exercício 4

Olá,

no exercício 4 pede para que sem usar o synchronized fazer um teste com a classe Vector. No caso abaixo, como poderei usar a classe Vector?

 public void run() {
        for (int i = comeco; i < fim; i++) {
            synchronized (mensagens) {
            mensagens.add("Mensagem " + i);
        }
      }

Seria somente fazer assim?

public synchronized boolean add(E e) {
 for (int i = comeco; i < fim; i++) {
        mensagens.add("Mensagem " + i);
}
}

As vezes algum assunto eu entendo bem, mas outros parece que confunde um pouco :)

Aproveitando esse assunto, nao vi exemplo do Hashset e LinkedList. Como poderei testar o Hashset e o LinkedList sem usar o synchronized?

Obrigado

2 respostas
solução!

A ideia seria testar sem o synchronized nem na assinatura do método. Ele quer que você veja que o mensagens.add() num Vector não tem problema de concorrência porque a classe já usa syncronized internamente. Então você não precisa usar de fora.

Diferente do caso da ArrayList que não é thread-safe e exige o uso do syncronized. E seria mesma coisa com HashSet e LinkedList.

Além do Vector, a Hashtable tbm é syncronized. E existem várias collections novas no pacote java.util.concurrent como por exemplo ConcurrentSkipListMap.

Obrigado Sérgio.