synchronized 深入理解

下看下面代码 

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

--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();
			}	
		}
		
		
	}
	
	}

  

转载于:https://www.cnblogs.com/itxuexiwang/p/6274875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值