在测试应用程序中,我假装服务器只同时接受最大数量的连接。为此我按照以下方式使用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方法期望接收已经创建的实例,但我知道创建这些实例可以折叠服务器。 谢谢。
答案 0 :(得分:0)
只有在调用Executors.newFixedThreadPool(3);
时才会创建线程类型对象。然后每个新请求都会创建Client
个对象,但是它们只需要强制Runnable接口 - 这些不是新线程(这取决于你的实现,但希望客户端不会自己创建新的线程)
这可能是help。您还应该考虑使用executor.submit
代替executor.execute
。