Java:我应该在这种情况下使用多线程吗?
问题描述:
我在写一个使用Java的服务器端应用程序。Java:我应该在这种情况下使用多线程吗?
该服务器包含系统的许多用户。对于每个用户,我想将其磁盘空间与远程网络存储器同步。因为同步是独立的,所以我在考虑同时执行它们。
我想为每个用户创建一个线程,并让同步任务同时触发。
但是该系统可以拥有数以万计的用户。这意味着一次创建数万个线程并同时启动。我不确定这是否是JVM可以处理的。
即使它可以处理这个问题,它会提高内存效率,因为每个线程都有自己的堆栈,这可能是一个大的内存命中!
请让我知道您的意见。
非常感谢。
答
你可以看一个固定大小的线程池给线程池来执行你的任务。这会给多线程带来明显的限制。
结账Executors.newFixedThreadPool()
答
就我个人而言,单台机器上不会有成千上万的用户。每个用户都有这么多的活跃用户,这对你来说无能为力。你应该能买得起多台机器。
你可以在Java中有这么多的线程,但正如你所说这是不高效的。您可以使用NIO库来管理与每个线程的多个连接。
图书馆像
是适合的。
答
你应该看看非阻塞IO。
这里是一个“随机”它从谷歌的礼貌文章: http://www.developer.com/java/article.php/3837316/Non-Blocking-IO-Made-Possible-in-Java.htm
barsju和samlewis都很好。如果使用非阻塞IO,则每个连接都不需要线程,而您需要的线程则需要使用线程池进行管理。 – 2012-04-15 11:28:24