Tôi có một Java Thread
đó cho thấy một tài sản mà chủ đề khác muốn truy cập:Chặn người gọi cho đến khi getFoo() có giá trị sẵn sàng chưa?
class MyThread extends Thread {
private Foo foo;
...
Foo getFoo() {
return foo;
}
...
public void run() {
...
foo = makeTheFoo();
...
}
}
Vấn đề là phải mất một thời gian ngắn kể từ thời điểm này sẽ kéo dài tới foo
có sẵn. Người gọi có thể gọi số getFoo()
trước số này và nhận số null
. Tôi muốn họ chỉ đơn giản là chặn, chờ đợi, và nhận được giá trị khi khởi tạo đã xảy ra. (foo
là không bao giờ thay đổi sau đó.) Nó sẽ là một vấn đề của mili giây cho đến khi nó đã sẵn sàng, vì vậy tôi cảm thấy thoải mái với cách tiếp cận này.
Bây giờ, tôi có thể thực hiện điều này với wait()
và notifyAll()
và có 95% cơ hội tôi sẽ làm đúng. Nhưng tôi tự hỏi làm thế nào tất cả các bạn sẽ làm điều đó; là có một nguyên thủy trong java.util.concurrent
mà sẽ làm điều này, mà tôi đã bỏ lỡ?
Hoặc, bạn sẽ cấu trúc nó như thế nào? Có, làm cho foo
dễ bay hơi. Có, đồng bộ hóa trên khóa nội bộ Object
và đặt séc trong vòng lặp while
cho đến khi không phải là null
. Tôi có thiếu gì không?
bạn đang nhanh chóng! LOL – Kiril