java - Java 中的多线程帮助

标签 java multithreading

我是 Java 新手,我需要一些帮助来处理这个程序。这是一个大型类项目的一小部分,我必须使用多线程。

这是我想要通过算法执行的操作:

while (there is still input left, store chunk of input in <chunk>)
{
    if there is not a free thread in my array then
      wait until a thread finishes

    else there is a free thread then
       apply the free thread to <chunk> (which will do something to chunk and output it).  
              Note: The ordering of the chunks being output must be the same as input
}

所以,我不知道该怎么做的主要事情:

  • 如何检查数组中是否有空闲线程?我知道有一个函数 ThreadAlive,但每次在我的循环中轮询每个线程似乎效率非常低。
  • 如果没有空闲线程,我如何才能等到一个线程结束?
  • 顺序很重要。如何保留线程输出的顺序?如图所示,输出的顺序需要与输入的顺序匹配。如何保证这种同步?
  • 我如何将 block 传递到我的线程?我可以只使用 Runnable 接口(interface)来执行此操作吗?

非常感谢您对这四个项目的任何帮助。因为我是一个 super 菜鸟,所以代码示例会有很大帮助。

(旁注:创建一个线程数组只是我的一个想法,用于处理用户定义的线程数。如果您有更好的方法来处理这个问题,欢迎提出建议!)

最佳答案

听起来你基本上有一个生产者/消费者模型,可以通过 ExecutorService 和 BlockingQueue 来解决。这是一个类似的问题,也有类似的答案:

producer/consumer work queues

关于java - Java 中的多线程帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899833/

相关文章:

java - 选择信息丰富的类名

java - volatile 和同步化解决竞争条件: Singleton Member Field

visual-studio - Visual Studio 调试器的线程问题

c++ - 我的代码中存在死锁/访问冲突,即使我已经相互排除它

java - 如何配置ThreadPoolExecutor来限制线程数

Java 8 : Kill/Stop a thread after certain period of time

java - SwingWorker 任务上的execute() 出现奇怪的结果

java - Swing中关于 "virtual trees"(自定义TreeModel)的问题

java - 如何在应用程序启动时启动后台线程

java - Spring、Morphia 和 DataAccessException 实现