我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > java线程取消与关闭
总共48087条微博

动态微博

查看: 1629|回复: 0

java线程取消与关闭

[复制链接]

57

主题

5

听众

129

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2015-02-08 12:21:31 |只看该作者 |倒序浏览

行为良好的软件能很完善地处理失败、关闭和取消等过程。

1、任务取消的原因:1、用户请求取消;2、有时间的限制;3、应用程序事件;4、错误;5、关闭

(1)中断:调用interrupt只是传递了请求中断,并不意味着立即停止目标线程;

(2)中断策略:规定线程如何解释某个中断请求

(3)响应中断:1:传递异常;2:恢复中断状态;

(4)计时运行

(5)通过Future来实现取消

(6)处理不可中断的阻塞(继承Thread,改写interrupt方法)

(7)采用newTaskFor来封装非标准的取消(java6,通过定制任务的Future可以改变Future.cancel的行为)

2、停止基于线程的服务

(1)例子:日志服务

方式:通过调用log方法将日志消息放入某个队列中,并由其他线程来处理;

停止该服务的方式:通过原子方式来检查关闭请求,并且有条件地递增一个计数器来保存提交信息的权利

(2)关闭ExecutorService

关闭ExecutorService的方法:shutdown&shutdownNow;在复杂的程序中,通常会将ExecutorService封装到某个更高级别的服务中,并且该服务能提供其自己的生命周期方法。

(3)毒丸对象

毒丸对象是指一个放在队列上的对象,其含义是:当得到这个对象时,立即停止;

限制:只有在生产者和消费者的数量都已知的情况下,才可以使用;生产者和消费者数目较大时,这种方法变得难以使用。

(4)例子:只执行一次的服务

场景:某个方法需要处理一批任务,并且当所有任务都处理完后才返回;

方式:通过一个私有的Executor来简化服务的生命周期管理,其中该Executor的生命周期是由这个方法控制的。

(5)shutdownNow的局限性

当通过shutdownNow来强行关闭ExecutorService时,尝试取消正在执行的任务,并返回所有已经提交但未开始的任务。但无法在关闭过程中知道正在执行任务的状态。除非任务本身会执行某种检查。

3、处理非正常的线程终止(未捕获异常的处理)

在Thread API中提供了Uncaught-ExceptionHandler,它能检测出某个线程由于未捕获的异常而终结的情况;

要为线程池中的所有线程设置一个UncaughtExceptionHandler;

4、JVM关闭

正常关闭&强行关闭

(1)关闭钩子(线程安全)

在正常关闭总,JVM首先调用所有已注册的关闭钩子。关闭钩子是指通过Runtime.addShutdownHook注册的但尚未开始的线程。

关闭钩子可以用于实现服务或应用程序的清理工作,例如删除临时文件或消除无法由操作系统自动清除的资源。

(2)守护线程---JAVA中最典型的这种类型代表就是垃圾回收器。

守护线程:创建一个线程来执行一些辅助工作,又不希望这个线程阻碍jvm的关闭;

默认情况下,主线程创建的所有线程都是普通线程;

区别:仅在于当线程退出时发生的操作。当一个线程退出时,jvm会检查其他症状运行的线程,如果这些线程是守护线程,那么JVM会正常退出操作。当jvm停止时,所有仍然存在的守护线程都会被抛弃。

(3)终结器(finalize)

终结器访问的任何状态都可能被多个线程访问,这样就必须对其访问操作进行同步。所以终结器并不能保证他们将在任何时候调用会运行;

避免使用终结器;


(3)终结器



科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表