简单点就是主线程selector.select();       时候甩出新线程socketChannel.register(selector, SelectionKey.OP_READ);无法注册上selector.select(); 阻塞状态的selector。
public void init() throws Exception {                          //开始监听端口
selector = Selector.open();
serverSocketChannel = ServerSocketChannel.open();
serverSocket = serverSocketChannel.socket();
serverSocket.bind(new InetSocketAddress(PORT));
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
start();
} @Override
public void run() {

System.out.println("始进行服务侦听:0.0.0.0:23456 ......");

while (true) {
selector.select();         
for (Iterator it = selector.selectedKeys().iterator(); it
.hasNext();) {
SelectionKey selectionKey = (SelectionKey) it.next();
it.remove();
if (selectionKey.isAcceptable()) {   //以上都是套路  !!当有连接
ServerSocketChannel server = (ServerSocketChannel) selectionKey
.channel();
new ConnectedThread(server.accept()); 甩出一个新线程 然后再线程中注册                                                                              socketChannel.register(selector, SelectionKey.OP_READ);// Thread.sleep(1000);      但在这里主线程sleep1秒 让上一行甩出的线程先注册到selector就行。
}
if (selectionKey.isReadable()) {
//做一些事情 问题是现在无法注册上Read  }
}
}
}
}]