Synchronized的个人学习总结

这篇文章是我个人前段时间学习大神们对于Synchronized讲解的总结。个人认为挺适合小白从0开始理解Synchronized的。因为我也是看网上的文章加自己写代码理解的,可能也有错误,有问题的话,请各位在评论区指出哈。

先附上学习资料来源,感谢乐于分享的同道中人:
http://www.cnblogs.com/paddix/p/5367116.html,这一篇讲的是Synchronized原理。
http://www.cnblogs.com/QQParadise/articles/5059824.html,这一篇和上面一篇差不多,但是内容少,浅显一些。深入学习的话,还是要看上面一篇的。
http://blog.csdn.net/u010996597/article/details/44618067,这一篇把Synchronized(this),Synchronized(.class),Synchronized+方法,Synchronized+静态方法,到底锁什么进行了讲解。

如果大家急于求成,想马上知道Synchronized是干嘛的,那就来对了,请看我的总结:
首先大家要有个概念,monitor。(每个object都有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,synchronized就是用来给monitor上锁的,当synchronized的代码块执行完就会释放这个monitor的锁。)

大家在代码中会看到好几种形式的synchronized,想必也是眼花缭乱不知道每个的具体作用。下面由我来科普:
synchronized(this)获得的是调用该含synchronized方法的引用对象,可能很拗口,上段代码,就是t1,t2的锁(具体代码不上了,类名取的通俗易懂)

        RunnableTest t1= new RunnableTest();
        RunnableTest t2= new RunnableTest();
        t1.start();
        t2.start();

synchronized(myclass.class)监控的是类本身的,获取类本身的监控器(monitor)。
synchronized修饰方法获取的是和synchronized(this)相同。
synchronized修饰static方法,监控的是该类本身的监视器。与synchronized(myclass.class)相同。
所以给小白们铲除一个误区,synchronized并不是锁住代码里面的东西,他们锁的只是监控器本身。线程获取监控器则runnable,获取不了则blocked。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值