首页 > 编程语言 > 详细

java并发编程基础2

时间:2015-08-12 02:11:16      阅读:266      评论:0      收藏:0      [点我收藏+]
  • thread的生命周期
? ? ? ? ? ? ??bubuko.com,布布扣
? ? ? ? ? ? 如图所示 ,Thread生命期,需要注意的是,stop和rusume均已经废除
? ? ? ? ? ? 在这里,着重叙述一下Thread的interrupt方法。
? ? ? ? ? ? Thread的stop方法已经被停用了,因此interrupt成了一个“终止线程”的方法,但是他又不是用来终止线程用的,比较绕口,简而言之,interrupt是为了结束线程的阻塞状态,观察interrupt的源码发现,其只是为线程设置了一个中断标记位。Thread.interrupt()方法不会中断一个正在运行的线程,这一方法?实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,?它将接收到一个中断异常?InterruptedException??InterruptedException ),从而提早地终结被阻塞状态。因此,??如果线程被上述几种方法阻塞,正确的停止线程方式是设置共享变量,并调用interrupt()(注?意变量应该先设置)。如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就?将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。在任何一种情况中,最?后线程都将检查共享变量然后再停止。
?
?
bubuko.com,布布扣
?
? ? ? ? 打印结果:
?
bubuko.com,布布扣
? ? ? ? 由此可见,在线程阻塞后(sleep),使用interrupt()方法,线程重新运行run()方法,但是由于此时设置了stop标识,因此线程运行结束。
? ? ? ? 我们在thread.stop = true;语句后调用thread.interrupt()方法,?该方法将在线程阻塞时抛出一个中断?信号,该信号将被catch语句捕获到,一旦捕获到这个信号,线程就提前终结自己的阻塞状态(置中断标志位为false),这样,它就能够 再次运行run 方法了,然后检查到stop = true,while循环就不会再被执行,在执行了while后面的清理工作之后,run方法执行完 毕,线程终止。
?
?
  • thread的基本使用方法
?
? ? ? ? thread有两种方法使用,一种是直接继承Thread类,另一种是实现Runnable接口,比较而言,最常使用的是Runnable因为Java不支持多继承,因此只是继承Thread不够灵活。
?

?

?
? ? ? ??

java并发编程基础2

原文:http://luchi007.iteye.com/blog/2234338

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!