Trong khi đọc mã nguồn của ArrayBlockingQueue
, tôi tìm thấy một bình luận giải thích rằng nó sử dụng "thuật toán hai điều kiện cổ điển được tìm thấy trong bất kỳ cuốn sách giáo khoa":tại sao Concurrency kiểm soát sử dụng cổ điển thuật toán hai điều kiện
/*
* Concurrency control uses the classic two-condition algorithm
* found in any textbook.
*/
/** Main lock guarding all access */
private final ReentrantLock lock;
/** Condition for waiting takes */
private final Condition notEmpty;
/** Condition for waiting puts */
private final Condition notFull;
Tại sao nó sử dụng thuật toán hai điều kiện (notEmpty, notFull) cổ điển?
Nó cho phép chỉ đánh thức đề quan tâm bất cứ điều gì vừa xảy ra. Ví dụ, một thread cố gắng 'take' từ một hàng đợi rỗng, chỉ quan tâm đến hàng đợi không rỗng (có cái gì đó cần lấy), nhưng không quan tâm đến hàng đợi không đầy. – assylias
Đây là một câu trả lời * đẹp * :) –
Câu hỏi của bạn cho thấy rằng bạn không đồng ý hoặc không hiểu quyết định của tác giả. Bạn có biết cách tiếp cận nào khác để thay thế? – seh