Estoy tratando de diseñar una clase como Code Kata para mí que tiene una propiedad de valor que se puede establecer, y la clase puede emitir instancias de ValueListener. La idea es que haya una instancia de ValueHolder con muchos subprocesos de cliente accediendo a ella simultáneamente. Cada subproceso de cliente ha solicitado un ValueWatcher y ha llamado a waitForValue().Notificar subprocesos cuando el contador cambia
Lo que realmente estoy luchando es qué condición debo usar en el ciclo while() para evitar notificaciones espurias (es decir, el valor no ha cambiado). Puedo ver que este diseño puede hacer posible que las instancias de ValueWatcher pierdan actualizaciones, pero estoy menos preocupado por eso en esta etapa.
¡Agradecería cualquier orientación que se ofrezca!
public class ValueHolder {
private int value = 0;
private final Object monitor = new Object();
public void setValue(int value) {
synchronized(monitor) {
this.value = value;
monitor.notifyAll();
}
}
ValueWatcher createChangeWatcher() {
return new ValueWatcher();
}
private class ValueWatcher {
public int waitForValue() {
synchronized(monitor) {
while (==== ??? =====) {
monitor.wait();
return value;
}
}
}
}
}
¿Ves notificaciones falsas? Si solo el actualizador llama 'notify' o' notifyall', entonces no veo cómo sería. – Gray
¿Podría ser que la llamada 'setValue' solo debería' notificar' a otros si el 'valor' realmente ha cambiado? En este momento podría actualizarse con el mismo valor y todos recibirán una notificación. ¿Es eso lo que quieres? – Gray
No veo por qué hay una necesidad de un ciclo 'while' en absoluto. – biziclop