나는 액세스 할 수있는 다른 스레드가 원하는 속성을 노출하는 자바 Thread
있습니다getFoo()에 값이 준비 될 때까지 호출자가 차단됩니까?
class MyThread extends Thread {
private Foo foo;
...
Foo getFoo() {
return foo;
}
...
public void run() {
...
foo = makeTheFoo();
...
}
}
문제는이 foo
사용할 수있을 때까지이 실행되는 시간에서 약간의 짧은 시간이 걸린다는 것이다. 전화를 걸기 전에 getFoo()
으로 전화하면 null
이됩니다. 나는 일단 초기화가 발생하면 단순히 차단, 대기 및 값을 얻는다. (foo
은 이후로 변경되지 않습니다.) 준비가 될 때까지 수 밀리 초가 걸릴 것이므로이 방법에 익숙합니다.
이제는 wait()
과 notifyAll()
으로 만들 수 있으며 95 %의 가능성이 있습니다. 그러나 나는 당신이 어떻게 그것을 할 것인지 궁금해. java.util.concurrent
에 원시가 있습니까? 내가 놓친 것입니까?
또는 구조는 어떻게 구성합니까? 예, foo
을 휘발성으로 설정하십시오. 예, 내부 잠금 장치 Object
에 동기화하고 null
이 아닐 때까지 수표를 while
루프에 넣습니다. 내가 놓친 게 있니? 여기
간단한 예 :
당신은 빠르다! LOL – Kiril