Synchronized的个人学习总结

来源:互联网 发布:网络用语dp什么意思 编辑:程序博客网 时间:2024/06/05 00:28

这篇文章是我个人前段时间学习大神们对于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。

原创粉丝点击