码迷,mamicode.com
首页 > 其他好文 > 详细

1.6synchronized代码块

时间:2019-12-04 10:36:15      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:str   结束   属性   inf   没有   字符串常量   string   code   --   

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

技术图片

 

 

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

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

技术图片

 

 

 技术图片

 

 

 输出结果:

技术图片

 

 

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

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

可以采用如下这种方式:

技术图片

 

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

 

 技术图片

 

 

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

锁对象改变的问题:

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

技术图片

 

 

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

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

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

 

技术图片

 

 

 技术图片

 

 

 这把锁就是modifyLock这个对象

技术图片

 

 

 执行结果:

技术图片

 

 

 

1.6synchronized代码块

标签:str   结束   属性   inf   没有   字符串常量   string   code   --   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!