1.6synchronized代码块

1.synchronized可以使用任意的Object进行加锁,用法比较灵活

 ===================================================================

另外特别注意一个问题,就是不要使用String常量加锁,会出现死循环

 

 输出结果:

 永远都是t1开始,t1结束,没有t2什么事,这是什么原因呢?

String在常量池中只有一个引用,所以尽量不要用字符串常量去加锁

可以采用如下这种方式:

这样就能保证t1,t2都进来了

 

 ===================================================================

锁对象改变的问题:

当使用一个对象进行加锁的时候,要注意对象本身发生改变的时候,那么持有的锁就不同.如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.

 如果一修改,锁就发生变化了,那么其他对应的线程就能进来了

----------------------------------------------------------------------------------------------------------------------------

如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.

 

 这把锁就是modifyLock这个对象

 执行结果:

原文地址:https://www.cnblogs.com/curedfisher/p/11981196.html