昨天在工作中碰到这么一种情况,用户每个月消费1000返100,在每个月初结算并在app上弹窗供用户点击领取,这里因为涉及并发问题所以考虑到可用的操作,觉得synchronized(项目jdk1.7)比较快捷有效。
当时采用synchronized锁住的是在该类中创建的静态对象,但是实测发现,只要疯狂点领取按钮/Jmeter 0秒多线程压测,还是会发生多次领取到的情况!!
1.这里就产生一个问题,这是否可以证明死锁这个例子的synchronized选择锁住的静态对象但还是线程不安全的呢?
于是对synchronized关键字锁住的东西再次感到有些迷茫,早上在网上找到一篇简书是这么一个表格:
和这么一段话:
2.上述陈述的结论我是这么理解的:既然用到了synchronized,就应该保证锁住的东西是类对象,否则都是线程不安全的。
但是这个想法我用synchronized修饰了方法又测试发现不会出现多次领取的情况,而且用简书文章末尾的方法就是synchronized修饰类对象依然会出现多次领取的情况!!!真的感觉很困扰很混乱
麻烦老师帮忙分析解答一下,多谢老师!!!!!
(这是此篇简书的链接https://www.jianshu.com/p/d53bf830fa09 侵删)