【问题标题】:Multithreading proplem [closed]多线程问题[关闭]
【发布时间】:2012-08-07 12:49:51
【问题描述】:

我在多任务处理方面遇到问题。我已经在下面解释了。

  • 我需要为我的所有用户(例如 200 个用户)做一些处理 网络应用程序。

  • 过程为协议请求调用。

  • 我最多可以运行 1000 个用户,并且在线程创建之间有睡眠时间。 但我需要在没有睡眠时间的情况下运行,而且我需要运行多达 1000 个用户。

  • 当我尝试为 200 个用户运行时,我没有得到任何响应。它停了很久。我不知道原因。

如果有人有解决问题的想法,请告诉我 ...谢谢...

【问题讨论】:

  • 你能发布你的源代码吗?很难完全理解您要解决的问题。
  • 同意——就目前而言,这听起来就像是对家庭作业的模糊描述。 为什么你需要“在没有睡眠时间的情况下运行”——你需要用代码和更多细节来解释实际问题是什么。
  • @NeilCoffey 我的应用程序将同时被 1000 多个用户使用,因此在睡眠时间,用户将获得时间延迟以从协议调用中获取详细信息。
  • 不可能从给出的描述中准确地理解你想要做什么,但我怀疑如果你认为你需要睡觉,那么你几乎肯定做错了什么。

标签: java multithreading protocols network-protocols


【解决方案1】:

嗯,在我看来,创建太多线程太快是个问题。

尝试使用某种ThreadPool 来最小化线程创建的开销。基本上,您会希望创建一组固定的线程,然后将这些线程重新用于新任务,而不是为每个任务创建一个新线程。

例如,如果每个任务需要 1 秒的时间来运行,而您在 100 秒内每秒执行 2 个任务,则每任务线程方法将创建 200 个线程来运行所有任务。 100 个线程池将能够使用其中一些线程多次执行所有 200 个任务,并且永远不会让任何东西等待/休眠。

【讨论】:

  • 感谢您的回复 Mr.Brian 这里我使用了线程池,使用以下代码创建线程池私有 ExecutorService 服务;服务 = Executors.newCachedThreadPool();提交线程 Future future = service.submit(callable object);关闭线程 service.shutdownNow();
  • 请记住,在池中创建过多线程实际上可能会降低性能,除非您的处理受到大量 IO 限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多