NIO:同步非阻塞
BIO:同步阻塞
BIO
以TCP编程举例,传统TCP编程将serversocker与一个端口绑定,监听这个端口,每当有新的客户端连接进来后,就返回一个Socker实例,这个socker实例就是用来和刚连接的客户端进行通信的。由于客户端很多,要实现并发处理,我们就必须为每个新的配置一个线程来处理,这样,主线程的作用就是接收新的连接,每当收到新连接后,如果线程池有空闲线程,就会有线程来处理。
我们可以看到,对每个被分配了clientsocket的线程,如果客户端一直不输出,那该线程就会一直阻塞,不肯释放,而且因为线程池的限制(这里限制了线程池中的线程数量为3),只能同时服务三个客户端。这就是BIO。
public class ThreadPoolServer {
public static void main(String[] args) throws IOException {
ExecutorService executor = Executors.newFixedThreadPool(3);//线程池中线程数量为3
RequestHandle requestHandle = new RequestHandle();
try (ServerSocket serverSocket = new ServerSocket(7777)) {
System.out.println("listening on" + serverSocket.getLocalSocketAddress());
while (true) {
Socket