线程池。避免使服务器饱和

时间:2018-03-02 13:19:24

标签: java threadpoolexecutor

在测试应用程序中,我假装服务器只同时接受最大数量的连接。为此我按照以下方式使用ThreadPool:

ThreadSocket client;
ExecutorService executor = Executors.newFixedThreadPool(3);
try {
    while (true) {
            client = new Client(serverSocket.accept());
            executor.execute(client);
    }
} catch (IOException e) {
    System.out.println("IOException: " + e.getMessage());
} finally {
    executor.shutdown();
}
}

ThreadPool工作得很好但我的问题是创建线程类型对象会发生什么。 execute方法期望接收已经创建的实例,但我知道创建这些实例可以折叠服务器。 谢谢。

1 个答案:

答案 0 :(得分:0)

只有在调用Executors.newFixedThreadPool(3);时才会创建线程类型对象。然后每个新请求都会创建Client个对象,但是它们只需要强制Runnable接口 - 这些不是新线程(这取决于你的实现,但希望客户端不会自己创建新的线程)

这可能是help。您还应该考虑使用executor.submit代替executor.execute