首页 > 其他 > 详细

synchronized 深入理解

时间:2017-01-12 09:13:08      阅读:221      评论:0      收藏:0      [点我收藏+]

下看下面代码 

大家猜猜日志应该是怎么样。

--aa--
--aa等等10秒--
---bb-
--bb等等10秒--

 

日志如上 不知道你猜到了吗

为什么会这样    因为加了一把类对象锁 SysThread.class 

在类型内部可以理解有一个monitor方法。

把加锁的通知 告诉monitor ,等结束在告诉monitor

 

同理 如果

synchronized 放到方法 这个monitor对象 就是所在对象。
synchronized 放到静态方法  这个monitor对象 就是所在类对象。

这样大家可以理解了
如果在一类上 所有方法 synchronized 所有方法都是串行
而不是 每个方法是串行。
synchronized  看看加锁的恐怖了。还敢随便枷锁吗?




 

 

package demo.thread;

public class SysThread {
public static void main(String[] args) {
	Thread   aa =new  Thread(new AA());
	Thread   bb =new  Thread(new BB());
	aa.start();
	bb.start();
}
}
class AA implements Runnable
{
 
	@Override
	public void run() {
		synchronized (SysThread.class) {
			System.out.println("--aa--");
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
		
	}
	
	}
class BB implements Runnable
{

	@Override
	public void run() {
		synchronized (SysThread.class) {
			System.out.println("---bb-");
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
		
		
	}
	
	}

  

synchronized 深入理解

原文:http://www.cnblogs.com/itxuexiwang/p/6274875.html

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