Sự khác biệt quan trọng giữa trạng thái bị chặn và trạng thái chờ là tác động lên bộ lập lịch. Một chuỗi ở trạng thái bị chặn đang tranh giành một khóa; luồng đó vẫn được coi là thứ mà bộ lập lịch biểu cần phục vụ, có thể được tính vào quyết định của bộ lập lịch về khoảng thời gian để cung cấp cho các luồng đang chạy (để nó có thể tạo cơ hội cho các luồng chặn trên khóa).
Khi một luồng ở trạng thái chờ, áp lực mà nó gây ra trên hệ thống được giảm thiểu và người lập lịch trình không phải lo lắng về điều đó. Nó không hoạt động cho đến khi nhận được thông báo. Ngoại trừ thực tế là nó giữ một chuỗi hệ điều hành bị chiếm đóng, nó hoàn toàn không hoạt động.
Đây là lý do tại sao việc sử dụng InformAll ít lý tưởng hơn, nó khiến một loạt các chuỗi trước đó đã ngủ yên vui vẻ không tải lên hệ thống để được đánh thức, nơi hầu hết chúng sẽ chặn cho đến khi họ có thể nhận được khóa, tìm thấy tình trạng của chúng. chờ đợi là không đúng, và quay trở lại chờ đợi. Sẽ tốt hơn nếu chỉ thông báo cho những chủ đề có cơ hội đạt được tiến bộ.
(Sử dụng ReentrantLock thay vì khóa nội tại cho phép bạn có nhiều điều kiện cho một khóa, để bạn có thể đảm bảo rằng chuỗi được thông báo là một chuỗi đang chờ trong một điều kiện cụ thể, tránh lỗi thông báo bị mất trong trường hợp một chuỗi được thông báo cho thứ mà nó không thể hoạt động.)