Tôi đã quét tất cả java documentation trên các câu hỏi synchronized
tìm câu trả lời cho câu hỏi này mà không có may mắn.Đơn đặt hàng được đồng bộ hóa
Giả sử tôi có thread1
, thread2
, thread3
cố gắng chạy tất cả các mã sau cùng một lúc.
synchronized(lockObj) {
doSomething();
}
Giả thread1
được đầu tiên doSomething()
, thread2
sau đó thread3
mà sẽ ngăn chặn và chờ vào báo cáo kết quả synchronized
.
Câu hỏi
- Khi
thread1
phát hành khóa, trong đó các chủ đề sẽ được phát hành đầu tiên? - Quy tắc đặt hàng chung áp dụng khi phát hành khóa là gì?
Tại sao không chỉ cần sử dụng một BlockingQueue như một [ArrayBlockingQueue] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html) hoặc một cái gì đó tương tự? Hay tôi không hiểu câu hỏi của bạn. –
Tôi sẽ tóm tắt nó trong một thuật ngữ duy nhất: các chủ đề chờ đợi trên màn hình được nhập ngũ trong một thời gian chờ [** set **] (http://docs.oracle.com/javase/specs/jls/se7/html/jls -17.html # jls-17.2). –
@HovercraftFullOfEels Sự nhầm lẫn của tôi thực sự bắt đầu sau khi đọc mã này http://www.tutorialspoint.com/java/java_thread_synchronization.htm Tôi luôn nghĩ rằng ổ khóa được quản lý theo cách FIFO nhưng dường như không phải – GETah