为一项复杂,长期运行的任务中断和杀死一切?

时间:2015-01-23 03:28:49

标签: java multithreading concurrency lambda

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

但是我想让这个更优雅,让用户开心。我一直在读Goetz'文字有一段时间,但我不需要非常复杂的杀死过程。它是一个工作线程,它可以启动其他几个线程(包括lambda并行流),并且所有需要的对象和资源都是由这些线程创建的。我不在乎清理。这些线程使用的任何对象都是由它们创建的,并且可以在中断时由垃圾收集器处理。

问题是传播InterruptionExceptions有太多的复杂性,深度调用堆栈,runnables和lambda表达式。我不介意创建一个标志,所有不同的工作实体(线程,类等)都可以读取。但是我基本上想要抛出一个未经检查的RuntimeException,在Button的actionPerformed()方法上捕获它,让一切都死掉。

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

为了清楚起见......我不希望仪表板和应用程序死掉。我只想要这个工作线程创建的所有东西(由" PROCESS"按钮调用)死掉并转到垃圾收集器。

0 个答案:

没有答案