Java 每个客户端一个线程就是答案吗?
我一直在研究多线程编程,例如,并注意到为连接到给定服务器的每个客户机创建一个Java 每个客户端一个线程就是答案吗?,java,multithreading,client-server,Java,Multithreading,Client Server,我一直在研究多线程编程,例如,并注意到为连接到给定服务器的每个客户机创建一个线程是非常流行的。事实上,我已经找到了一些示例客户机-服务器程序,它就是这样做的。(我试图采纳这个想法,但现在,我有点怀疑。)根据Java:How to Program,建议我使用ExecutorService创建和管理线程,因为程序员无法预测系统实际调度线程的时间,不管线程的创建和启动顺序如何 我打算做什么 如前所述,我正在创建一个服务器,为每个客户机创建一个线程。客户端将向我发送数据,线程将获取数据,将其存储在文件
线程是非常流行的。事实上,我已经找到了一些示例客户机-服务器程序,它就是这样做的。(我试图采纳这个想法,但现在,我有点怀疑。)根据Java:How to Program,建议我使用ExecutorService
创建和管理线程,因为程序员无法预测系统实际调度线程的时间,不管线程的创建和启动顺序如何
我打算做什么
如前所述,我正在创建一个服务器,为每个客户机创建一个线程。客户端将向我发送数据,线程
将获取数据,将其存储在文件中,并记录数据
我的问题
使用ExecutorService
创建线程(并管理它们!)是否与为每个客户端提供线程一样有效,但更易于管理?此外,它会消除著名的“每个客户端一个线程”的想法所造成的开销吗
使用ExecutorService创建线程(并管理它们!)是否与为每个客户机提供一个线程一样有效,但更易于管理
对
此外,它会消除著名的“每个客户端一个线程”的想法所造成的开销吗
否。开销通常是指活动线程的数量,而活动线程的数量不会通过使用线程池而改变。可以通过任何一种方式自动终止线程(或者使用垃圾收集来销毁已经完成任务的线程(通过System.gc()
)?您可以让线程池关闭任何空闲线程一分钟。这是缓存线程池在默认情况下所做的。因为只有真正活动的线程才重要,所以您不太可能注意到差异。