【发布时间】:2020-10-05 20:45:25
【问题描述】:
与这个问题类似,但在细节上有所不同:Interrupting a thread that waits on a blocking action?
有一个我无法控制的 3pty 库,这个库有一个方法pressButtonAndHoldIt(long duration)。这是一种阻塞方法,这意味着如果您将duration 设置为 10 分钟 - 它将执行 10 分钟(无中断)的操作。
我从一个单独的线程中使用这个方法,所以我可以在“按住按钮”的同时做其他事情:
final Future<?> f = Executors.newSingleThreadExecutor().submit(() -> {
3ptyLibrary.pressButtonAndHoldIt(Duration.ofMinutes(10).toSeconds());
});
var stuff = myOtherStuff();
//here I want to stop what was submitted in "f", e.g. "f.forceStop()"
通常myOtherStuff() 大约需要 9 分钟,但有时可能需要 5 分钟,所以我想停止那个阻塞的后台进程。我该怎么做?
请注意,Executors.newSingleThreadExecutor().submit() 只是一个示例:我可以在 java 中以任何方式创建后台线程(如果有帮助的话)。
【问题讨论】:
-
没有什么可以阻止第三方方法的执行,除非它已经被编程为响应中断。
标签: java multithreading