探索并发编程(五)------Java多线程开发技巧

发表于:2011-9-27 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cutesource    来源:51Testing软件测试网采编

  2)中断

  中断通常是实现取消最明智的选择,但线程自身需要支持中断处理,并且要处理好中断策略,一般响应中断的方式有两种:

  ● 处理完中断清理后继续传递中断异常(InterruptedException)

  ● 调用interrupt方法,使得上层能感知到中断异常

  3) 取消不可中断阻塞

  存在一些不可中断的阻塞,比如:

  ● java.io和java.nio中同步读写IO

  ● Selector的异步IO

  ● 获取锁

  对于这些线程的取消,则需要特定情况特定对待,比如对于socket阻塞,如果要安全取消,则需要调用socket.close()

  4)JVM的关闭

  如果有任务需要在JVM关闭之前做一些清理工作,而不是被JVM强硬关闭掉,可以使用JVM的钩子技术,其实JVM钩子也只是个很普通的技术,也就是用个map把一些需要JVM关闭前启动的任务保存下来,在JVM关闭过程中的某个环节来并发启动这些任务线程。具体使用示例如下:

  • public void start() {  
  •     Runtime.getRuntime().addShutdownHook(new Thread() {  
  •         public void run() {  
  •             try { LogService.this.stop(); }  
  •             catch (InterruptedException ignored) {}  
  •         }  
  •     });  
  • }
  • 相关链接:

    探索并发编程(一)------操作系统篇

    探索并发编程(二)------写线程安全的Java代码

    探索并发编程(三)------Java存储模型和共享对象

    探索并发编程(四)------Java并发工具

    33/3<123
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号