gpt4 book ai didi

java - 从可运行类中中断线程? ( java )

转载 作者:行者123 更新时间:2023-11-30 06:37:56 25 4
gpt4 key购买 nike

我正在尝试在一个实现可运行接口(interface)的类中设置一个方法,该接口(interface)将设置该类的中断状态。我希望能够从类内部完成它的原因是我还需要处理一些其他清理工作,我希望能够通过调用一个方法而不是调用来完成这一切,例如:

Gui gui = new Gui() // class that implements runnable

Thread guiThread = new Thread(gui, "gui thread");

guiThread.start()

...

...

guiThread.interrupt();

gui.cancel();

目前我的取消代码看起来像这样,但是它没有正确设置该线程的中断状态。

public void cancel()

{

Thread.currentThread().interrupt();

// other clean up code here.

}

关于我是否/如何使它工作的任何建议?

谢谢。

编辑:当我试图让取消工作时,我注释掉了 guiThread.interrupt(),这样我就不仅仅是设置状态,而是重置状态。

最佳答案

您只想调用 interrupt() - 这将中断 guiThread,而不是调用线程。例如

public void cancel()

{

guiThread.interrupt();

// other clean up code here.

}

但是,您确定要在调用线程上运行清理代码吗?通常最好让线程自己进行清理。您不知道线程何时被中断并准备好被清理。如果线程在中断时将退出,则可以在 interrupt() 之后添加一个 join() ,但这通常不如让线程本身进行清理更可取。 (稍后,您甚至可能没有单独的线程来执行这些任务,而是使用线程池。将清理与任务放在一起将使这更容易管理。)

最后,请注意您的线程不会自动中断并停止它正在做的事情——您需要调用检查中断状态的方法,例如 Object.wait()、Thread.sleep() 等,或者您可以通过 Thread.isInterrupted() 显式检查中断状态。

编辑:它认为 cancel() 在 guiThread 上。不是,所以我更改了中断调用。

关于java - 从可运行类中中断线程? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795945/

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