执行器接口在 java 中如何工作?

how the executor interface works in java?

我正在研究一本关于java套接字的书,刚看的那一章讲的是多连接,即一个服务器通过线程同时连接多个客户端。解释创建这些连接的两种方法,1) 为每个客户端创建一个新线程。 2)使用有限数量的N个线程同时处理N个客户端的请求,其他的排队。然后他介绍了 Executor 接口,据我所知,这是最好的方法,因为它重用了我们已经使用但不再使用的线程(我可能误解了,因为我是用英文阅读的,我不明白好吧 )。所以我在java中做了一个例子:

public class Server{
    public static void main(String[] args){
        ServerSocket ServSock=new ServerSocket(6666);
        Executor service=Executors.newCachedThreadPool();
        while(true){
            Socket ClntSock=ServSock.accept();
            service.execute(new EchoProtocol(ClntSock));
        }
    }
}

EchoProtocol.java是一个扩展Thread的class,客户端向服务器发送一个字符串,服务器发送和客户端一样。为了测试它是否重用了线程,我将它放在构造函数中:

System.out.println(getName());

但是每次我 运行 一个新客户时,即使我已经完成了一些客户,也会打印出 Thread-0 Thread-1 Thread-2... 不断增加的索引。所以不要重用线程?我有什么不明白的?

我决定使用 ExecutorService class