gpt4 book ai didi

java - java中的中断线程

转载 作者:行者123 更新时间:2023-12-04 04:44:34 25 4
gpt4 key购买 nike

我有一种情况,我正在使用线程,她调用了一个可以执行多个进程的方法,我需要使用一个“取消”按钮,您必须在其中停止线程,我不能使用:“while”,以验证它是否被取消,因为它在此过程中没有循环。

例如:

    Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
controller = new FirstEtapaController();
execProcess();
return null;
}
};
new Thread(task).start();

调用方法
   private void execProcess() {
Thread thread = new Thread(new Runnable() {

public void run() {
getController().execMhetod();
refreshTable();
}
});
thread.start();
thread.join();
};

即,我需要停止这个过程,即使“ExecMethod” 已经在运行 ,这需要几分钟,所以我必须停下来 不用等他说完这样,其他人就不会继续了。

记住这个过程将与我的 DAO 进行迭代。

最佳答案

唯一的方法(行为良好的方法)是在您生成的线程中添加逻辑点以检查中断状态。您可以选择使用内置Thread.interrupt()机制,或使用某种形式的线程安全变量(AtomicBoolean ?)或某种信号量添加您自己的逻辑。

如果您使用 Thread.interrupt()那么您的子进程在遇到某些情况时会抛出 InterruptedException,例如 Thread.wait() 和其他需要同步或使用 java.util.concurrent.* 类的方法。

您将需要(应该已经)处理 InterruptedExceptions无论如何,在线程中,但也许您需要在子进程中进行常规“检查”以查找中断状态(可以使用 Thread.isInterrupted() )

值得一读Handling InterruptedException in Java

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

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