Đây là một mô hình được khuyến khích rằng wait() nên được gọi bên trong một vòng lặp while bên trong một khối được đồng bộ hóa.Làm thế nào để wait() lấy lại Khóa trong Java
Câu hỏi của tôi là cách chuỗi chờ() lấy lại khóa?
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
Cân nhắc chuỗi 1 chạy trước và bắt đầu chờ điều kiện. Nó phát hành khóa và thread 2 có được khóa thiết lập điều kiện và thông báo thread 1. Bây giờ thread 1 được khóa, kiểm tra điều kiện và bắt đầu thực hiện "làm điều gì đó".
Câu hỏi của tôi là khi Chủ đề 1 được thông báo nó bắt đầu thực hiện từ điều kiện trong khi dòng mã đã đồng bộ hóa (mon) không bao giờ được thực hiện lại thì luồng 1 có khóa như thế nào? Động lực bên trong cung cấp khóa cho Chủ đề 1 là gì?
+1 cho đoạn trích javadoc. –
@Nathan: Tôi nghĩ chúng ta biết câu trả lời :-) Chúng tôi không (ít nhất là tôi không hiểu) phần này của Tài liệu Java: Vì vậy, khi trở về từ phương thức * {@code wait}, đồng bộ hóa trạng thái của đối tượng và của * chuỗi {@code T} chính xác như khi phương thức {@code wait} * được gọi. – Geek
@Geek: bạn không hiểu gì? thoát khỏi phương thức chờ đặt chuỗi trong một khối được đồng bộ hóa, vì vậy nó cần lấy khóa trước. nếu không nó sẽ được thực hiện mã trong một khối đồng bộ mà không cần phải có được khóa. –