que tienen una aplicación Java Thread
que expone una propiedad que otros hilos quieren acceso:Las llamadas bloquean hasta que getFoo() tenga un valor listo?
class MyThread extends Thread {
private Foo foo;
...
Foo getFoo() {
return foo;
}
...
public void run() {
...
foo = makeTheFoo();
...
}
}
El problema es que se necesita algo de tiempo corto desde el momento presente se prolongará hasta foo
está disponible. Las personas que llaman pueden llamar al getFoo()
antes de esto y obtener un null
. Prefiero que simplemente bloqueen, esperen y obtengan el valor una vez que se ha producido la inicialización. (foo
nunca se cambia después). Pasará una cuestión de milisegundos hasta que esté listo, por lo que me siento cómodo con este enfoque.
Ahora, puedo hacer que esto ocurra con wait()
y notifyAll()
y hay una probabilidad del 95% que lo haré bien. Pero me pregunto cómo lo harían todos ustedes; ¿Hay algún primitivo en java.util.concurrent
que haga esto, que me he perdido?
O, ¿cómo lo estructuraría? Sí, haga que foo
sea volátil. Sí, sincronícelo en un bloqueo interno Object
y ponga el cheque en un bucle while
hasta que no sea null
. ¿Me estoy perdiendo algo?
¡eres rápido! LOL – Kiril