synchronize的心得

记录一下synchronize(this)、synchronize(A.class)、private B  b= new B(); synchronize(b) 、synchronize static(A.class)的使用。

                 其中synchronize(this) 锁的是当前对象,它的使用和private B  b= new B(); synchronize(b) 一致,但是如果在一个类中,两个方法一个使用的synchronize(this)一个使用了private B  b= new B(); synchronize(b)  这还是异步操作,因为这是锁的两个对象。如果两个方法都是用synchronize(this)或者都是用private B  b= new B(); synchronize(b)这两个中的一种,则这两个方法会阻塞,方法间竞争锁。

                 synchronize(A.class)和synchronize static(A.class)本质一样,都是class级别的锁,打个比方:

                             A a  = new A();

                             A a1 = new A();

                  起两个线程共同处理A的一个同步方法,会顺序执行。而如果是使用synchronize(this) 则因为两个对象,所以会异步执行奥。抽空这里弄点例子。呼呼哈嘿。

另外针对String类型的值做为锁对象时,一定要保证锁对象不能改变,个人建议还是尽量不要用String类型的数据做为锁对象。

原文地址:https://www.cnblogs.com/jiligalaer/p/5323348.html