zoukankan      html  css  js  c++  java
  • java网络通信:伪异步I/O编程(PIO)

    缺点:避免了线程资源耗尽的问题,但是根本上来说,serversocket的accept方法和inputstream的输入流方法都是阻塞型方法。

    服务端:加了一个线程池,实现线程复用。客户端不变

    public class TimeServer {
        public static void main(String[] args) throws IOException {
            int port = 8080;
            ServerSocket server = null;
            try {
                server = new ServerSocket(port);
                System.out.println("The time server is start in port : " + port);
                Socket socket = null;
    TimeServerHandlerExecutePool singleExecutor = new TimeServerHandlerExecutePool(50, 10000);// 创建IO任务线程池
                while (true) {
                    socket = server.accept();
                    singleExecutor.execute(new TimeServerHandler(socket));
                }
            } finally {
                if (server != null) {
                    System.out.println("The time server close");
                    server.close();
                    server = null;
                }
            }
        }
    }
    
    public class TimeServerHandlerExecutePool {
        private ExecutorService executor;
        public TimeServerHandlerExecutePool(int maxPoolSize, int queueSize) {
            executor = new ThreadPoolExecutor(Runtime.getRuntime()
                    .availableProcessors(), maxPoolSize, 120L, TimeUnit.SECONDS,
                    new ArrayBlockingQueue<java.lang.Runnable>(queueSize));
        }
        public void execute(java.lang.Runnable task) {
            executor.execute(task);
        }
    }

    客户端:

    public class TimeClient {
        public static void main(String[] args) {
            int port = 8080;
            Socket socket = null;
            BufferedReader in = null;
            PrintWriter out = null;
            try {
                socket = new Socket("127.0.0.1", port);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(socket.getOutputStream(), true);
                out.println("QUERY TIME ORDER");//发送请求
                System.out.println("Send order 2 server succeed.");
                String resp = in.readLine();//回复
                System.out.println("Now is : " + resp);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (this.socket != null) {
                    try {
                        this.socket.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    this.socket = null;
                }
            }
        }
    }
  • 相关阅读:
    vue bus 中央事件总线
    0时间复杂度
    stack 数据结构
    es6 class
    directives 自定义指令
    node中间件
    数据结构博客清单
    TCP/IP 协议栈博客清单
    Java 面向对象:接口
    Java 面向对象:Object 类
  • 原文地址:https://www.cnblogs.com/nazhizq/p/6538687.html
Copyright © 2011-2022 走看看