java多线程

时间:2011-05-07 16:06:39

标签: java multithreading

我正在开发一个程序,需要根据一些到达间隔来生成线程。

  • 我有一个控制类产生一个 每个“interarrival”新线程,这些线程设置为setDaemon(true)。
  • 每个线程在a之后停止 “持续时间”时间。 (在当地计算 在线程)。
  • 我使用ExecutorService实现了ExecutorService threadExecutor = Executors.newFixedThreadPool(250);保存250个线程的引用,并且能够在需要时停止所有线程。
  • 理论上这是因为经过测试,只产生了47个线程。

所以我的问题是:

  • 是否有限制 ExecutorService的?我应该换到chached吗?
  • 这是JVM的限制吗?
  • 如何通过此限制并生成保留“interarrival”的新线程?
  • 有没有最好的方法来实现这个目标?
  • 还有一种方法可以检测在JVM崩溃之前我可以生成的线程数吗?

2 个答案:

答案 0 :(得分:1)

你怎么知道只有47个产生了?如果要生成线程,为什么要使用执行程序?

  • ExecutorService有限制吗?我应该换到chached吗?

限制由内存量和操作系统决定。没有固定的限制。

  • 这是JVM的限制吗?

没有

  • 如何通过此限制并生成保留“interarrival”的新线程?

我不明白这个问题。

  • 有没有最好的方法来实现这个目标?

我还不明白你想做什么,所以我很遗憾不能回答这个问题。

  • 还有一种方法可以检测在JVM崩溃之前我可以生成的线程数吗?

不,因为您可以创建的线程数可能受VM参数的影响。它还取决于操作系统,内存等。

答案 1 :(得分:-1)

我没有仔细阅读您的代码,但我认为您之前生成的线程有可能已经完成运行并且已经死亡,因为每个调用长度相同并且生成新调用的速率是恒定的(取决于在你的profile.getCallInterarrival();)上。当你的程序第一次启动时,它将不断生成新的线程,直到1分钟后(60000),呼叫开始消失,系统将达到平衡,每个新呼叫都会产生,有一个呼叫死亡。

如果我的理论是正确的,那么你的profile.getCallInterarrival()将返回类似1.33的内容。