Java 为了一项复杂的、长期运行的任务而中断和杀死一切?

Java 为了一项复杂的、长期运行的任务而中断和杀死一切?,java,multithreading,concurrency,lambda,Java,Multithreading,Concurrency,Lambda,我对多线程有点精通,但在大多数情况下我避免了线程/任务中断,因为对我来说这不是一个有趣的话题。但是我有一个Swing仪表板,它带有一个“进程”按钮,可以执行一个长时间运行的任务(可以在任何地方运行5秒到7分钟)。它是一个高度战术性的应用程序,因此用户希望能够随时取消任务,而不是像我指示他们的那样终止并重新启动应用程序 但我想让它更优雅一点,让用户满意。我读戈茨的文章已经有一段时间了,但我不需要太多的复杂来扼杀这个过程。它是一个工作线程,可以启动其他几个线程(包括lambda并行流),所有需要的对

我对多线程有点精通,但在大多数情况下我避免了线程/任务中断,因为对我来说这不是一个有趣的话题。但是我有一个Swing仪表板,它带有一个“进程”按钮,可以执行一个长时间运行的任务(可以在任何地方运行5秒到7分钟)。它是一个高度战术性的应用程序,因此用户希望能够随时取消任务,而不是像我指示他们的那样终止并重新启动应用程序

但我想让它更优雅一点,让用户满意。我读戈茨的文章已经有一段时间了,但我不需要太多的复杂来扼杀这个过程。它是一个工作线程,可以启动其他几个线程(包括lambda并行流),所有需要的对象和资源都由这些线程创建。我不在乎清理。这些线程使用的任何对象都是由它们创建的,可以在中断时由垃圾回收器处理

问题是有太多的复杂性、深层调用堆栈、可运行性和lambda表达式来传播中断异常。我不介意创建一个所有不同工作实体(线程、类等)都可以读取的标志。但我基本上想抛出一个未经检查的RuntimeException,在按钮的actionPerformed()方法中捕获它,然后让一切都消失

这可能吗?我希望这是简单的,并且希望这个工作线程创建的所有东西都被垃圾收集器销毁。或者我必须显式地杀死所有线程池、线程等吗


我只是想说清楚。。。我不希望仪表板和应用程序死掉。我只希望这个工作线程(通过“进程”按钮调用)创建的所有东西都死掉并转到垃圾收集器

我想我可以使用GoogleGuava的EventBus发布一个事件,更新工作线程及其子线程所在的每个依赖类中的标志。这样,算法中的每个线程/类实体都将停止它们的子进程,清理它们自己,并销毁它们自己,一直返回到工作线程。为什么不在java.util.concurrent包中使用FutureTask?工作线程是在某个对象上执行任务,还是只是在进行计算?如果您可以保证工作进程永远不会访问任何资源,除非这些资源后来变成垃圾,那么您就可以使用
Thread.stop()