Channel
在BIO编程中,每一个客户端连接请求过来,对于输入流,必须有单独的线程监听,看是否有数据到达,对于输出流,可以采用一个线程池管理,这样服务端的线程数量至少为n 下面例子是NIO中采用Channel+线程池方式,有个缺点是不知道SocketChannel是否有数据到达了,必须迭代所有的SocketChannel,如果有数据到达,有就处理,否则就跳过,效率太低 public class TimeServer { private BlockingQueue<SocketChannel> idleQueue =new LinkedBlockingQueue<SocketChannel>(); private BlockingQueue<Future<SocketChannel>> workingQueue=new LinkedBlockingQueue<Future<SocketChannel>>(); private ExecutorService executor = Executors.newSingleThreadExecutor(); { new Thread(){ @Override public void run() { try { while (true) { //task1:迭代当前idleQueue中的SocketChannel,提交到线程池中执行任务