gpt4 book ai didi

java - 我到底如何中断一个线程?

转载 作者:行者123 更新时间:2023-11-30 03:22:15 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何中断线程。我知道以前有人问过这个问题,但我不确定我是否理解正确。

我目前有:

public class Test implements Runnable {
public void run() {
int i = 0;
while(!Thread.currentThread().isInterrupted() && i < 100) {
System.out.println(i++);
}
}
public static void main(String args[]) {
Thread x = new Thread(new Test());
x.start();
for (int i = 0; i < 100; i++) {
System.out.println(i+100);
if (i == 75) {
x.interrupt();
}
}
}
}

两个线程计数为 100。这是一个简单的例子,我知道,但我突然想到,如果我在 run 中做一些更复杂的事情,方法,那么外部的 while 循环可能不够好。所以我要问的是:

如果我在 run 中有 50 行代码方法,我想中断这 50 行代码中的线程,那么我必须有 if 的负载检查每行之间是否有中断?就我目前对整个事情的理解而言,情况就是这样……这让我觉得我错过了一些东西。

感谢您的帮助:)

最佳答案

您的理解是正确的 - 中断旨在合作而不是先发制人的中断。由目标线程决定何时可以安全地被中断,并在那时进行适当的检查。如果线程在阻塞时被中断,某些阻塞操作将抛出 InterruptedException,但除此之外,您可以根据需要检查 Thread.interrupted()。在大多数算法中,您不希望允许在任意点处中断,而只允许在明确定义的地方(您知道状态将保持一致)。

请注意,您应该使用 Thread.interrupted() 而不是 Thread.currentThread().isInterrupted() 进行检查,因为前者会在之后重置中断标志检查它。一旦 isInterrupted 返回 true,它将在每次调用时继续返回 true,直到重置标志,这可能不是您想要的。

关于java - 我到底如何中断一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074129/

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