Wednesday, June 19, 2013

NIO - SelectionKey

Một biểu tượng đại diện cho sự đăng kí của SelectableChannel với một selector.

Một selection key được khởi tạo mỗi khi một channel được đăng kí với một selector. Một key vẫn còn hợp lệ tới khi nó bị hủy bỏ bằng cách gọi hàm cancel của chính key đó hoặc đóng channel hoặc đóng selector. Hủy bỏ một key không xóa ngay nó khỏi selector của nó mà nó được thêm vào cancelled-key set của selector đó và nó bị loại bỏ trong suốt lần lựa chọn tiếp theo. Tính hợp lệ của key có thể kiểm tra bằng phương thức isValid.

Một selection key chứa 2 operation set được đại diện bởi một giá trị integer.  Mỗi bit của một operation set biểu thị một loại của selectable operation mà được hỗ trợ bỏi channel của key.

  • Interest set xác định các loại hành động nào sẽ được kiểm tra sự sẵn sàng vào lần tiếp theo khi phương thức lựa chọn của selector được gọi. Interest set được khởi tạo với giá trị nhận được khi key được tạo,  sau đó nó có thể thay đổi thông qua phương thức interestOps(int).
  • Ready set đinh nghĩa các loại hành động cho key's channel nào được phát hiện đã sẵn sàng bởi key's selector. Ready set được khởi tạo với giá tri 0 khi key được khởi tạo, sau đó nó có thể cập nhật bới selector trong suốt một selection operation, nhưng nó không thể cập nhật trực tiếp.
Một selection key's ready set chỉ ra rằng channel của nó sẵn sàng cho một vài loại hoạt động như một gợi ý, nhưng không đảm bảo, một hoạt động trong một loại có thể thực thi bởi một thread mà không bị block. Một ready set chính xác ngay lập tức sau khi hoàn thành hoạt động lựa chọn. Nó có thể được thực hiên không chính xác bởi các sự kiện bên ngoài và bới các hoạt đông I/O mà được gọi trên kênh tương ứng

Lớp này định nghĩa tất cả bit operation-set được biết,  nhưng chính xác bit nào được hỗ trợ bởi một channel dựa trên loại channel. Mỗi subclass của SelectableChannel định nghĩa một phương thức validOps() cái mà trả về một set xác định nhưng hoạt động mà được hỗ trợ bởi channel. Việc kiểm tra hoặc thiết lập  một operation-set bit là không được hỗ trợ bỏi key's channel sẽ trả về một runtime exception phù hợp.

Liên kết một vài dữ liệu application-specific với một selection key là cần thiết, ví dụ một đối tượng mà đại diện cho trạng thai của một protocol cấp cao và xử lý các readiness notification trong trật tự để implement protocol đó. Do đó selection key hỗ trợ attachment một object tùy ý cho một key. Một đối tượng có thể được gắn vào thông qua phương thức attach và sau đó nhận lại đối tương này thông qua phương thức attachment.

Selection keys an toàn khi sử dụng bởi nhiều thread cùng lúc. Các hoạt động đọc và ghi interest set sẽ được đồng bộ với các hoạt động của selector.




No comments:

Post a Comment