gpt4 book ai didi

java - 如何检查线程是否完成了任务?

转载 作者:行者123 更新时间:2023-12-02 09:09:07 27 4
gpt4 key购买 nike

好的,我创建了几个线程来完成一些复杂的任务。现在我如何检查每个线程是否已成功完成?

class BrokenTasks extends Thread {
public BrokenTasks(){
super();
}
public void run(){
//Some complex tasks related to Networking..
//Example would be fetching some data from the internet and it is not known when can it be finished
}
}


//In another class
BrokenTasks task1 = new BrokenTasks();
BrokenTasks task2 = new BrokenTasks();
BrokenTasks task3 = new BrokenTasks();
BrokenTasks task4 = new BrokenTasks();
task1.start();
.....
task4.start();

那么我如何检查这些所有任务是否成功完成 i) 主程序(主线程) ii)从每个连续的线程。例如:检查任务1是否已经从任务2中结束..

最佳答案

使用线程的一个好方法是不直接使用它们。而是创建一个线程池。然后,在 POJO 任务封装中,有一个仅在计算结束时设置的字段。

当另一个线程可以看到状态时,可能会有 3-4 毫秒的延迟 - 但最终 JVM 做到了这一点。只要其他线程不覆盖它就可以了。您可以通过确保每个任务都有一个唯一的要执行的工作实例和状态来保护这一点,并且其他线程仅每 1-5 秒轮询一次,或者拥有工作人员在完成后调用的监听器。我用过的图书馆是我自己的 https://github.com/tgkprog/ddt/tree/master/DdtUtils/src/main/java/org/s2n/ddt/util/threads

要在服务器启动或静态 block 中使用:

package org.s2n.ddt.util;

import org.apache.log4j.Logger;
import org.junit.Test;

import org.s2n.ddt.util.threads.PoolOptions;
import org.s2n.ddt.util.threads.DdtPools;

public class PoolTest {
private static final Logger logger = Logger.getLogger(PoolTest.class);

@Test
public void test() {
PoolOptions options = new PoolOptions();
options.setCoreThreads(2);
options.setMaxThreads(33);
DdtPools.initPool("a", options);
Do1 p = null;
for (int i = 0; i < 10; i++) {
p = new Do1();
DdtPools.offer("a", p);

}
LangUtils.sleep(3 + (int) (Math.random() * 3));
org.junit.Assert.assertNotNull(p);
org.junit.Assert.assertEquals(Do1.getLs(), 10);
}

}

class Do1 implements Runnable {
volatile static long l = 0;

public Do1() {
l++;

}

public void run() {

// LangUtils.sleep(1 + (int) (Math.random() * 3));
System.out.println("hi " + l);
}

public static long getLs() {
return l;
}
}

你不应该做的事情:* 不要每 10-15 毫秒就做一次事情* 除非学术界否则不要创建自己的线程* 不要让它变得比 97% 情况所需的更复杂

关于java - 如何检查线程是否完成了任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28855813/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com