首先synchronized用法很明确
1、每个lokc对象的对象头里都会关联一个Montior,这里记录了占有该锁的线程ID
2、每个线程访问锁的时候 都会通过全局Montior列表,尝试获取该锁,获取成功将锁对象头里Montior里的占有线程ID改成该线程ID,获取失败后放到Enry队列中,获取成功后,如果wait后将线程ID放到wait队中
使用规则:
一、当两个并发线程訪问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内仅仅能有一个线程得到运行。还有一个线程必须等待当前线程运行完这个代码块以后才干运行该代码块。
二、然而。当一个线程訪问object的一个synchronized(this)同步代码块时。还有一个线程仍然能够訪问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程訪问object的一个synchronized(this)同步代码块时。其他线程对object中全部其他synchronized(this)同步代码块的訪问将被堵塞。
四、第三个样例相同适用其他同步代码块。
也就是说,当一个线程訪问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其他线程对该object对象全部同步代码部分的訪问都被临时堵塞。
五、以上规则对其他对象锁相同适用.
http://blog.csdn.net/jingzi123456789/article/details/69951057
http://blog.csdn.net/lvyuan30276/article/details/49009485
https://www.cnblogs.com/zfyouxi/p/5127305.html
阅读(1695) | 评论(0) | 转发(0) |