entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Uso de synchronized en Java para mantener coherencia de datos

Tengo una clase que mantiene el control de un juego multijugador:

class ColaTareas {
    List<Tarea> lista = new ArrayList<>();
    public agregarTarea(Tarea tarea) {
        lista.add(tarea) ;
    }
    public Tarea quitarTarea() {
        return lista.remove(0) ;
    }
}

Varios hilos pueden acceder a esa instancia concurrentemente por lo que es necesario garantizar coherencia durante su vida.

¿Cómo puedo hacerlo?

3 Respuestas

1voto

Bunk3r Puntos5380

Eso depende que es lo que quieres mantener intatacto, si solamente pueden ser modificados los valores mediante metodos (como deberia ser normalmente) entonces a los metodos importantes solo agragales la palabra synchronized y con eso ya no podra ser ejecutado por mas de dos a la vez y tendran que esperar a que se libere el metodo para poder accederlo.

0voto

david_gil_de_gomez_p comentado

Los métodos son atómicos. Synchronized serviría de poco.

0voto

Peter Puntos150460

Prueba agregando synchronized a la firma de los métodos como te dice Bunk3r.

public synchronized agregarTarea(Tarea tarea) { ... }
public synchronized Tarea quitarTarea() { ... } 

1voto

Synchronized es un modificador que impide que varios hilos accedan al mismo fragmento de código simultáneamente. Con esto impides que, durante ese fragmento, colisionen ejecuciones. En tu caso concreto, creo que el problema va por otro lado, puesto que lo que deberías usar es una colección sincronizada, para evitar acceso a ella por parte de varios procesos simultáneos, ya que los métodos son atómicos.

Yo en tu lugar utilizaría lo siguiente:

ArrayList<String> list = Collections.synchronizedList(new ArrayList<String>());

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta