gpt4 book ai didi

java - 在线程中使用静态变量作为不同实例之间的通信

转载 作者:行者123 更新时间:2023-12-01 06:19:53 25 4
gpt4 key购买 nike

我有一个多线程批处理应用程序,可以运行 5-10 个并发执行线程。它们的数据段被仔细地切片以尽可能均匀地分布,但是,当然,执行时间总是不同的。我想做的是在最后一个线程完成时调用最后一种 onFinalize 方法,这将进行一些统计计算。

我想知道对于一个线程来说,知道它是最后一个线程的最佳方法(而不是查询数据库,这看起来有点行人)是否是有一个静态变量,当每个线程完成时都会添加和减少新线程。因此,当线程完成并执行递减操作时,我可以使用 if 来查看未完成的线程数是否为 0,然后调用最终统计信息。

我就是这么想的。我想知道是否有更好、更优雅或万无一失的方法来实现这一点。

使用 Java 7

谢谢

最佳答案

所以你还能做的就是创建一个 ThreadManager类(class)。这个类应该有 List<Thread> 。每当您创建新的Thread时要执行您的任务,您应该 register它在 ThreadManager 。然后在ThreadManager中创建一个方法返回总数 numberlive ThreadsList .

通过这种方式,您可以随时查看有多少线程正在运行,并且如果需要,您还可以对正在运行的线程执行任何其他操作。还一个Thread应定期运行,这应清除 List 中的所有死线程引用。 .

样本ThreadManager看起来像这样:

public class ThreadManager {
private static ThreadManager tm;
private List<Thread> threads;

public static ThreadManager get() {
if(null == tm) {
tm = new ThreadManager();
}

return tm;
}

private ThreadManager() {
threads = new ArrayList<Thread>();
}

public int getCountOfAliveThreads() {
int count = 0;
for(Thread t : threads) {
if(t.isAlive()) {
count++;
}
}

return count;
}
}

希望这有帮助。您还可以在Thread List上执行其他功能。 .

关于java - 在线程中使用静态变量作为不同实例之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274821/

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