Java中的简单多线程

时间:2012-10-31 00:00:13

标签: java multithreading concurrency

目前,我正在运行一个无线程模型,这个模型不能正常工作,因为我在处理我正在处理的数据之前我的内存不足。我已经做了所有可以优化代码的更改,但它仍然不够快。

显然,我应该继续使用线程模型。我想知道最简单,最简单的方法是:

  • 主线程将一些信息传递给工作人员
  • 该工作人员执行一些我将从主要方法中重构的工作
  • 工人将消失,新的将在需要时实例化

我从来没有使用过java线程,而且从我读过的东西看起来很复杂,即使我正在寻找的东西看起来很简单。

3 个答案:

答案 0 :(得分:1)

如果您有多个具有相同优先级的独立工作单元,最佳解决方案通常是某种工作队列,其中有限数量的线程(为优化性能而选择的数量)位于while(true)循环出列队列中的工作单位并执行它们。

通常,最佳线程数将是处理器数+/- 1,但在某些情况下,如果线程容易因磁盘I / O请求或其他类似问题而停滞,那么较大的数量将是最佳的。 / p>

但请记住,可能需要调整整个系统。例如,您可能需要更多磁盘臂,当然可能需要更多RAM。

答案 1 :(得分:0)

我首先要阅读Java Concurrency作为复习;)

特别是,我会花一些时间来了解Executors API,因为它会完成您所描述的大部分内容而不需要处理许多锁的大量开销;)

答案 2 :(得分:0)

将内存消耗分配给多个线程不会改变总体内存消耗。从我从你的问题中读出的内容,我想向前迈进并告诉你:增加Java引擎的堆,这将有所帮助。看起来你必须优化Java启动参数而不是代码。如果我错了,那么你将不得不缓冲数据。到磁盘!不是同一内存模型中的线程。