【问题标题】:How to close a socket when using the Executor interface?使用 Executor 接口时如何关闭套接字?
【发布时间】:2014-10-16 05:05:54
【问题描述】:

在为 TCP 连接创建新线程时,我正在尝试使用 Executor 接口创建一个高效的线程池。这是我的代码:

    ServerSocket server = new ServerSocket(20006);  
    Socket client = null;  
    Executor service = Executors.newCachedThreadPool();  
    boolean f = true;  
    while(f){  
        client = server.accept();  
        System.out.println("Connection established!");  
        service.execute(new ServerThread(client));  
    }   

我的问题是当一个线程被停用并从线程池中删除时,我该如何关闭套接字?

【问题讨论】:

    标签: java multithreading sockets


    【解决方案1】:

    将套接字的引用传递给ServerThread的构造函数,然后在run()方法的最后一行,调用socket.close()

    public class ServerThread implements Runnable // or extends Thread
    {
        private Socket socket;
    
        public ServerThread(Socket socket)
        {
            this.socket = socket;
        }
    
        @Override
        public void run()
        {
            // ...
    
            socket.close();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多