Sincronizar ArrayList

5 respostas
SirDominque

Oi oi gente.
Estou tentando sincronizar essa lista.

Eu tenho 2 classes que vao precisar ficar acessando essa lista, que contém sockets, para verificar conexoes e etc…

Como posso sincronizar ela? Ou será que eu deveria criar uma cópia dela em cada classe?

public ArrayList<Usuarios>  listaUsuarios   = new ArrayList<>();

5 Respostas

K

já ouviu falar do modificador synchronized ?

public synchronized retorno nomeMetodo(){
 //do something
}
tveronezi

Use…

public List<Usuarios>  listaUsuarios   =  Collections.synchronizedList(new ArrayList<>());
SirDominque

tveronezi:
Use…

public List<Usuarios>  listaUsuarios   =  Collections.synchronizedList(new ArrayList<>());

Muito Obrigado, foi isso mesmo que tentei fazer, mas da esse Erro :

incompatible types required: ArrayList<Usuarios> found: List<Object>

Devo mudar mey ArrayList pra List?

K

Andre Lopes:
tveronezi:
Use…

public List<Usuarios>  listaUsuarios   =  Collections.synchronizedList(new ArrayList<>());

Muito Obrigado, foi isso mesmo que tentei fazer, mas da esse Erro :

incompatible types required: ArrayList<Usuarios> found: List<Object>

Devo mudar mey ArrayList pra List?

assim deve funcionar…

public List<Usuarios>  listaUsuarios   =  Collections.synchronizedList(new ArrayList<Usuarios>());
E

Atenção: o uso de uma coleção sincronizada garante apenas que ela é coerente. Não garante que seu programa vai estar certo.
Normalmente, você precisa sincronizar não a coleção, mas o seu acesso.
Por exemplo, digamos que você queira localizar uma conexão e se achada, encerrá-la. Provavelmente você teria de escrever algo como:

synchronized (listaDeConexoes) {
      if (achou uma conexão adequada na lista de conexões para ser encerrada) {
          encerrar a conexão;
          remover a conexão da lista de conexões;
      }
}

O simples uso de Collections.synchronizedList não garante isso.

Criado 10 de janeiro de 2013
Ultima resposta 10 de jan. de 2013
Respostas 5
Participantes 4