如何在视图范围的bean中终止线程?

sdnqo3pr  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(311)

在我们的应用程序中,当用户单击commandlink时,会生成一个弹出窗口。此单击将传递一个要处理的id。
我的托管bean是ViewScope的,我正在创建一个线程来执行一些任务。
在用户单击链接的场景中,会生成一个弹出窗口,并且线程已开始执行作业,假设用户关闭弹出窗口并尝试单击提供不同id的链接。我的问题是以前启动的线程没有被销毁。我仍然可以得到最新的id细节作为响应,但是前面的线程仍然执行作业。
我想知道是否有一种方法可以终止一个新请求的前一个示例线程。我知道我可以通过sessionscoped实现这一点,但是弹出窗口是在同一个会话中打开的。

bhmjp9jg

bhmjp9jg1#

作为您的用例可能的快速解决方案:
我会使用threadpool,而不是为每个请求创建新线程(因为线程池的思想更有效+在标准api中提供)
然后,您可以轻松地停止池中任何正在运行的线程,我找到的解决方案是:http://www.coderanch.com/t/234197/threads/java/stopping-runnable-threadpoolexecutor =>问题包含线程池实现的示例,第一个答案给出了解决方案
打电话:

boolean cancel(boolean mayInterruptIfRunning)

在您的情况下,呼叫应使用:

mayInterruptIfRunning=true

剩下的唯一问题是:将来的参考文献放在哪里?:)
如果您愿意,我们也可以讨论:)

相关问题