我有使用框架struts2和Tomcat的J2EE项目。有两个动作:“开始任务”和“停止任务”。据我了解,当用户运行任务“启动任务”时,Tomcat启动执行任务的线程。用户可以单击“停止任务”,然后Tomcat启动第二个线程,以停止第一个线程。执行任务的方法非常大。有查询数据库和计算。为了停止线程,我使用第一个线程的interrupt()
,但interrupt()
只是更改标志的值,但方法中的代码继续运行。我在方法的不同部分检查中断标志(Thread.currentThread().isInterrupted()
),如果线程中断,我使用“return”。有没有其他方法?如何在Java中的线程中停止执行该方法?
1
A
回答
1
你的实现是正确的。建议您使用的方式。其他的方法是使用Thread.stop()
,但是这个方法自java 1.1以后不推荐使用,也没有人应该使用它。这种方法类似于Unix中的kill -9
,即它只是杀死可能导致程序进入不一致状态并可能产生资源泄漏的线程。
很明显,你可以改善你的设计。你说这个方法非常大。一般方法不应超过20行。那么,50是最大的。如果您的方法如此之大,请将其分解为更小的任务,并在每项任务之前检查isInterrupted()
。
前进到面向对象的世界:使用方法perform()
创建接口Task
。 (名称无关紧要,您可以选择其他名称)。 每个子任务应该在单独的类中实现,并应实现此接口。然后创建专门的InterruptionChecker
,实现Task
并持有其他任务。它检查线程是否中断,如果没有,则运行有效负载任务。这种模式被称为包装或修饰器。
现在你的“大”的方法应该只运行循环中的所有任务。当线程被破坏时,没有新的任务被执行。
相关问题
- 1. 如何停止方法的执行从运行()调用线程
- 2. 如何在Java中停止线程?
- 3. 如何在Java中停止线程
- 4. 在Java中停止线程
- 5. 在Java中停止线程?
- 6. 如何停止Java中的线程?
- 7. Java线程停止执行,它不应该是
- 8. 这是我应该停止Java中的线程的方式吗?
- 9. 执行在Jetty关闭期间停止线程的方法
- 10. 线程停止执行
- 11. Java中,如何停止线程
- 12. Java:如何中断/停止线程?
- 13. 如何用线程中断方法停止线程
- 14. 如何停止Java线程?
- 15. 如何停止Java线程?
- 16. Java多线程停止方法
- 17. 如何停止在android中执行customlistview的getview方法?
- 18. 如何停止在setTimeout中定义的方法执行
- 19. 如何停止执行UserControls PageLoad方法?
- 20. Java,停止(中断)线程
- 21. Java线程/运行停止
- 22. 如何停止执行iphone中的线程
- 23. 停止执行getCurrentPosition方法
- 24. 停止方法执行
- 25. 如何停止在线程池执行程序中运行的任务Android
- 26. 如何在主线程停止/暂停线程/ Activity在android中暂停/停止?
- 27. 如何停止在android中执行getview()方法?
- 28. 如何在java中终止执行线程?
- 29. 代码(java,多线程)在一行代码后停止执行
- 30. 在Python 2.7中立即停止线程执行/终止
这是如何工作的,)你只能问其他线程停止执行(与中断()方法),而且它是由被中断的线程就如何将这种中断 – pomkine 2015-03-19 10:12:45