Ho un Java Thread
che espone una proprietà che altri thread vogliono accedere:Blocco chiamanti fino a quando getFoo() ha un valore pronto?
class MyThread extends Thread {
private Foo foo;
...
Foo getFoo() {
return foo;
}
...
public void run() {
...
foo = makeTheFoo();
...
}
}
Il problema è che ci vuole un po 'poco tempo dal momento in cui questo viene eseguito fino a quando foo
è disponibile. I chiamanti possono chiamare lo getFoo()
prima e ottenere uno null
. Preferirei semplicemente bloccare, attendere e ottenere il valore una volta che l'inizializzazione è avvenuta. (foo
non viene mai modificato in seguito.) Sarà questione di millisecondi finché non sarà pronto, quindi sono a mio agio con questo approccio.
Ora, posso farlo accadere con wait()
e notifyAll()
e c'è il 95% di possibilità che lo farò bene. Ma mi chiedo come lo fareste tutti; c'è una primitiva in java.util.concurrent
che farebbe questo, che mi sono perso?
Oppure, come lo strutturate? Sì, rendere foo
volatile. Sì, sincronizza su un lucchetto interno Object
e inserisci il check in un ciclo while
finché non è null
. Mi sto perdendo qualcosa?
sei veloce! LOL – Kiril