面试题答案
一键面试-
创建Selector:
Selector selector = Selector.open();
-
获取通道并设置为非阻塞模式: 以
SocketChannel
为例,SocketChannel socketChannel = SocketChannel.open(); socketChannel.configureBlocking(false);
-
注册通道到Selector并指定感兴趣的事件:
socketChannel.register(selector, SelectionKey.OP_READ);
上述代码中
SelectionKey.OP_READ
表示对读事件感兴趣,还可以是SelectionKey.OP_WRITE
(写事件)、SelectionKey.OP_CONNECT
(连接事件)、SelectionKey.OP_ACCEPT
(接收连接事件)等。对于
ServerSocketChannel
,同样先获取通道并设置为非阻塞模式:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.configureBlocking(false); serverSocketChannel.bind(new InetSocketAddress(8080)); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
这里注册
OP_ACCEPT
事件用于监听客户端连接。