Java:我应该在这种情况下使用多线程吗?

时间:2012-04-15 10:53:17

标签: java multithreading

我正在使用Java编写服务器端应用程序。

服务器拥有系统的许多用户。对于每个用户,我想将其磁盘空间与远程网络存储同步。因为同步是独立的,所以我想同时进行同步。

我正在考虑为每个用户创建一个线程,并让同步任务同时触发。

但该系统可以拥有数万名用户。这意味着一次创建数万个线程并同时触发。我不确定这是否是JVM可以处理的事情。

即使它可以处理这个问题,这会是内存效率,因为每个线程都有自己的堆栈,这可能是一个很大的内存命中!

请告诉我你的意见。

非常感谢。

3 个答案:

答案 0 :(得分:4)

你可以查看一个固定大小的线程池,给出一个线程池来执行你的任务。这将使多线程的好处具有明显的限制。

查看Executors.newFixedThreadPool()

答案 1 :(得分:3)

您应该研究非阻塞IO。

这是一篇关于谷歌礼貌的“随机”文章: http://www.developer.com/java/article.php/3837316/Non-Blocking-IO-Made-Possible-in-Java.htm

答案 2 :(得分:0)

就个人而言,我不会在一台机器上拥有数万名用户。如果这么多用户处于活动状态,您将无法满足每位用户的需求。你应该能买不少一台机器。

你可以在Java中拥有这么多线程,但正如你所说这样效率不高。您可以使用NIO库来管理与每个线程的多个连接。

这样的图书馆

http://mina.apache.org/

http://www.jboss.org/netty

合适。

同样有趣http://code.google.com/p/nfs-rpc/