【问题标题】:java multithreading series task execution [duplicate]java多线程系列任务执行[重复]
【发布时间】:2023-03-10 10:14:01
【问题描述】:

假设四个线程必须执行任务。每个线程必须做一个单元工作。如何知道哪个线程完成了它的工作来分配它下一个工作。

实际上,我必须使用 4 个线程,每个线程必须将 2d 数组的一列复制到 1d 数组中..

编辑:不使用线程池。 非常感谢。

【问题讨论】:

  • 让线程从共享(同步)工作队列中拉出工作,并一直循环,从队列中拉下一个项目?
  • 实际上,我必须使用 4 个线程,每个线程必须将 2d 数组的一列复制到 1d 数组中。我已经更新了问题。谢谢。

标签: java multithreading


【解决方案1】:

由于您正在向线程提交任务,因此可以使用以下方法实现相同的效果:

    ExecutorService es = Executors.newFixedThreadPool (4);

    for (int i=1; i<=TOTAL_TASKS; i++) {
        es.submit (new Runnable() {
            @Override
            public void run () {
                // Do work here!
            }
        });
    }

【讨论】:

  • 不使用线程池可以吗?谢谢。
  • 不知道你有那个特定的限制。因此,在不使用 ThreadPool 的情况下,一种选择是执行 JP Moresmau 建议的操作 - 使用工作队列,并从中提取允许线程代码处理下一个工作项的条目。想澄清一下:线程一旦完成执行就会被销毁,所以你不能让 run() 方法完成并期望分配更多的工作给一个线程,因为它已经死了。
  • 扩展@Jos​​eCifuentes 所说的内容,您应该使用阻塞工作队列来避免线程终止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多