我有一个启动几个线程的应用程序,最终一个线程可能需要退出整个应用程序,但是其他线程可能处于任务中间,所以我想让它们在退出之前继续当前循环。
在下面的示例中,线程 2 不知道线程 1 何时尝试退出,它只是强制一切立即完成。
我怎样才能让 Thread2、3 和 4 等在关闭之前完成它们的循环?
编辑:为了解决重复的问题:这与父类不能负责操纵关闭的典型情况不同,任何单个线程都必须能够启动关闭。
Edit2:我还留下了我最终做的答案,这是已接受答案的实现。
class Scratch {
public static void main(String[] args) {
Thread Task1 = new Thread(new Task1());
Task1.start();
Thread Task2 = new Thread(new Task2());
Task2.start();
// ... more threads
}
public class Task1 implements Runnable {
public void run() {
while (true) {
// ...
System.exit(0);
// ...
}
}
}
public class Task2 implements Runnable {
public void run() {
while (true) {
// ...
// I need to know about System.exit(0) to exit my loop
// ...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用volatile boolean所有线程都会不断检查的变量。如果一个线程将该变量的值设置为false,则所有线程都将看到新值并退出while循环。
说明:volatile变量中的读/写操作是原子的。除此之外,易失性变量的值不会被缓存,因此所有线程都会看到相同的值。
class Scratch {
private static volatile boolean isRunning = true;
public static void main(String[] args) {
Thread Task1 = new Thread(new Task1());
Task1.start();
Thread Task2 = new Thread(new Task2());
Task2.start();
// ... more threads
}
public class Task1 implements Runnable {
public void run() {
while (isRunning) {
// ...
isRunning = false; // let's stop all threads
// ...
}
}
}
public class Task2 implements Runnable {
public void run() {
while (isRunning) {
// ...
// I need to know about System.exit(0) to exit my loop
// ...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |