【发布时间】:2018-06-24 21:20:42
【问题描述】:
我有这 5 个运行 while 循环的简单线程:
flasherThread = new Thread(new Runnable() {
@Override
public void run() {
while(running.get()) {
// do network stuff
}
}
});
running 被声明为private final AtomicBoolean running;。
我有这个方法:
public void stopFlasherThread() {
running.set(false);
}
我的问题是将标志设置为 false 立即停止线程?还是我需要调用flasherThread.join() 来确保线程已经停止?
主要问题是我一次有 4-5 个。
所以我有一个循环,例如:
for (int i = 0; i < 5; i++) {
ThreadArrayList.get(i).stopFlasherThread();
ThreadArrayList.get(i).join() // should I do this ?
}
任何帮助都会很棒!谢谢
【问题讨论】:
-
Thread#join只是等到指定的线程死亡。如果这是您打算发生的事情,那么您应该调用它。 -
退出 run 方法会停止线程。期间。
-
你真的不需要创建自己的中断系统,它already exists
-
@D.B 并使用中断?
-
如果你想保存线程管理,你可以使用 Fork-Join-Pool。您向这个池发送 RecursiveActions 或 RecursiveTasks,它们在不同的线程上进行处理。 Actions/Tasks 不一定是递归的,但如果您创建子问题并将其提交到池中,则可以是递归的。在这里您可以找到一个很长的解释:baeldung.com/java-fork-join,这里是一个斐波那契示例:dzone.com/articles/a-look-at-forkjoinpool
标签: java concurrency