Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在使用Executor接口时关闭套接字?_Java_Multithreading_Sockets - Fatal编程技术网

Java 如何在使用Executor接口时关闭套接字?

Java 如何在使用Executor接口时关闭套接字?,java,multithreading,sockets,Java,Multithreading,Sockets,在为TCP连接创建新线程时,我尝试使用Executor接口创建一个高效的线程池。这是我的密码: ServerSocket server = new ServerSocket(20006); Socket client = null; Executor service = Executors.newCachedThreadPool(); boolean f = true; while(f){ client = server

在为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));  
    }   

我的问题是,当线程处于非活动状态并已从线程池中删除时,如何关闭套接字?

将套接字的引用传递给
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();
    }
}