Khi viết một số mã kiểm tra tôi đã tìm thấy rằng Selector.select() có thể trở lại mà không có Selector.selectedKeys() chứa bất kỳ khóa nào để xử lý. Điều này xảy ra trong vòng lặp chặt chẽ khi tôi đăng ký kênh chấp nhận() ed vớiJava NIO chọn() trả về mà không có các phím được chọn - tại sao?
SelectionKey.OP_READ | SelectionKey.OP_CONNECT
làm hoạt động quan tâm.
Theo tài liệu, chọn() phải trả lại khi:
1) Có các kênh có thể hoạt động.
2) Bạn gọi rõ ràng là Selector.wakeup() - không có phím nào được chọn.
3) Bạn rõ ràng Thread.interrupt() chuỗi làm việc chọn() - không có phím nào được chọn.
Nếu tôi không nhận được khóa nào sau khi chọn() Tôi phải ở trong các trường hợp (2) và (3). Tuy nhiên, mã của tôi không gọi wakeup() hoặc ngắt() để bắt đầu các khoản trả về này.
Bất kỳ ý tưởng nào về những gì đang gây ra hành vi này?
Cảm ơn câu trả lời. Điều này rõ ràng là một điều bất thường trong hành vi lựa chọn, nhưng nó dễ dàng giải quyết được. –
@FrankTaylor Tôi không biết tại sao lỗi lập trình nên được coi là "một bất thường trong hành vi chọn". – EJP