gpt4 book ai didi

java - 在Java中中断另一个线程的run方法中的一个线程

转载 作者:行者123 更新时间:2023-11-29 03:23:42 24 4
gpt4 key购买 nike

我正在读这个post并且从一个线程中断另一个线程的建议是

"""如果正确实现,这里有一些应该有效的方法。

您可以让两个 threads 定期检查一些公共(public)标志变量(例如,将其称为 stopNow),并安排两个线程在完成时设置它。 (标志变量需要是易变的……或正确同步。)

您可以让两个 threads 定期调用 Thread.isInterrupted() 方法来查看它是否已被中断。然后每个线程在完成时都需要在另一个线程上调用 Thread.interrupt()。"""

我不明白第二种方法是如何使用 Thread.isInterrupted() 的。也就是说,Thread-1如何调用Thread-2上的Thread.interrupt()



考虑这个例子,在 main 方法中我启动了两个 threads t1t2。我希望 t1 在达到特定条件后停止 t2。我怎样才能做到这一点?

    class Thread1 extends Thread {


public void run(){
while (!isDone){
// do something
}
} //now interrupt Thread-2
}

class Thread2 extends Thread {

public void run(){
try {
while(!Thread.isInterupted()){
//do something;
}
catch (InterruptedExecption e){
//do something
}
}
}


public class test {

public static void main(String[] args){


try {

Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t1.start();
t2.start();
} catch (IOException e) {
e.printStackTrace();
}
}


}

最佳答案

这里的上下文是您正在尝试使用线程中断来实现您的方案。

为了实现这一点,t1 对象需要引用 t2 线程对象,然后它只需调用 t2.interrupt().

t1 可以通过多种方式获取对 t2 的引用。

  • 它可以作为构造函数参数传递。 (您需要在 Thread1 之前实例化 Thread2 ...)
  • 它可以通过调用 Thread1 上的 setter 来设置。
  • 它可以从静态变量或数组或某种单例“注册表”对象中检索。
  • 可以通过枚举 ThreadGroup 中的所有线程来查找与 t2 的名称匹配的线程。

关于java - 在Java中中断另一个线程的run方法中的一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181552/

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