1.6synchronized代码块
1.synchronized可以使用任意的Object进行加锁,用法比较灵活
===================================================================
另外特别注意一个问题,就是不要使用String常量加锁,会出现死循环
输出结果:
永远都是t1开始,t1结束,没有t2什么事,这是什么原因呢?
String在常量池中只有一个引用,所以尽量不要用字符串常量去加锁
可以采用如下这种方式:
这样就能保证t1,t2都进来了
===================================================================
锁对象改变的问题:
当使用一个对象进行加锁的时候,要注意对象本身发生改变的时候,那么持有的锁就不同.如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.
如果一修改,锁就发生变化了,那么其他对应的线程就能进来了
----------------------------------------------------------------------------------------------------------------------------
如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.
这把锁就是modifyLock这个对象
执行结果:
没有所谓的平步青云!
活在当下!
坚持一下
再坚持一下!
...