Java 有没有办法在套接字通道上注销选择器

Java 有没有办法在套接字通道上注销选择器,java,sockets,select,nonblocking,socketchannel,Java,Sockets,Select,Nonblocking,Socketchannel,这是一个非常直截了当的问题,但我发现有必要注销忽略我的java套接字通道的选择器 SocketChannel client = myServer.accept(); //forks off another client socket client.configureBlocking(false);//this channel takes in multiple request client.register(mySelector, SelectionKey.OP_READ | Selection

这是一个非常直截了当的问题,但我发现有必要注销忽略我的java套接字通道的选择器

SocketChannel client = myServer.accept(); //forks off another client socket
client.configureBlocking(false);//this channel takes in multiple request
client.register(mySelector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);//changed from r to rw
以后我可以在程序中调用类似

client.deregister(mySelector);
选择器将不再捕捉该套接字通道的数据键。鉴于我的服务器/客户端设计,这将使我的生活更加轻松。

在选择键上调用
cancel()

SelectionKey key = client.register(mySelector,
    SelectionKey.OP_READ | SelectionKey.OP_WRITE);
...
key.cancel();


除了@Nikolai的回答。执行
client.close()
操作也会注销频道

当一个键被取消时,它将被添加到选择器的取消键集中,无论是通过关闭其通道还是通过调用其取消方法


或者您也可以执行
client.close()
...
SelectionKey key = client.keyFor(mySelector);
key.cancel();