码迷,mamicode.com
首页 > 编程语言 > 详细

多线程深度剖析

时间:2015-07-06 21:24:35      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

多线程这块有个非常重要且经典的图例,可以很好的帮助我们理解多线程,搭配API文档,应该可以轻松搞定多线程了。技术分享

如图,调用线程的start方法后,线程进入可运行状态,经过系统调度器决定是否运行,而且两者可以相互转换(Running->Runnable的一种情况是分配给线程的时间片用完了),图像上方是阻塞事件引发线程进入阻塞(不可运行)状态,引起线程阻塞的事件有:调用了sleep方法、线程调用wait方法等待特定条件的满足、线程输入/输出阻塞。左下方是访问对象的synchronized方法时,首先要进入到对象的锁池等待获得对象的所,才能够进入可运行状态,经系统调度运行,而右下方是调用对象的wait方法,wait和notify以及notifyAll均隶属于Object对象,因此任何一个对象都用这些方法,而三者又都是final的,因此该方法不能被重写,也就是说,你不能通过继承来改变其行为,阅读API文档可以知道,调用wait方法的前提是已经获得对象的锁了(也就是wait方法的调用要在synchronized方法或者synchronized块里),并且调用完wait后,该线程释放掉对象的锁,进入对象锁的等待池中,直到有notify通知他,他才会醒来进入对象的锁池里,等待获得对象的锁,一旦获得对象的锁后,便进入可运行状态。

另外,需要注意的一点是,调用线程的sleep方法,线程在睡眠的过程中并不会释放掉对象的锁。

 

多线程深度剖析

标签:

原文地址:http://www.cnblogs.com/Code-Rush/p/4625144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!