首页 > 代码库 > 并发编程:取消与关闭
并发编程:取消与关闭
1、取消标志:任务可能永远不会检查取消标志,如BlockingQueue.put阻塞操作
2、中断:
1)它并不是真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己
2)中断是实现取消的最合理方式
3)除非你知道中断该线程的含义,否则就不应该中断这个线程
4)中断策略:尽快退出执行流程
4、响应中断
1)传递异常
2)恢复中断状态(再次调用interrupt)
注:只有实现了线程中断策略的代码才可以屏蔽中断请求
5、在专门的线程中中断任务:RethrowableTask是主线程,r是子线程,t在两线程中共享
class RethrowableTask implements Runnable { private volatile Throwable t; public void run() { try { r.run(); } catch(Throwable e) { this.t = e } } public void rethrow() { if(t != null) { throw launderThrowable(t) } } }
6、非标准取消操作
1)处理不可中断的阻塞:改写写interrupt();
public void interrupt() { try { socket.close(); } catch(IOException e) { } finally { super.interrupt(); } }
2)采用newTaskFor来封装非标准的取消:click
7、使用ExecutorService的可停止日志服务
1)使用SingleThreadExecutor
2)stop方法调用 exec.shutdown;exec.awaitTermination
8、爬虫:通过判断isShutdown(),保存中断状态
9、未捕获异常的处理
public class UEHLogger implements Thread.UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { logger.log(t.getName, e) } }
10、关闭钩子:用户实现服务或应用程序的清理工作,如删除临时文件或清除无法有系统自动清除的资源
11、守护线程:JVM启动时创建的所有线程中,除了主线程,其他的线程都是守护线程
并发编程:取消与关闭
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。