时间:2019-08-08 11:02:18 作者:johnnyl 浏览量:37
synchronized(stock){
if(this.stock>num){
this.stock -=num;
}
}
}
}
在并发环境下会出现什么问题?
简单地说存在两个核心问题:
1. 锁是有可能变化的。
2. Integer做锁是不安全,也就是说不能用来做锁。
如果库存stock在-128到127默认范围之间,它是在缓存在静态常量池里面,如果被其他代码使用没有释放,你的程序永远得不到锁,无法进行减库存操作。如果超出-128到127默认范围,你的锁是变化的,它违反锁的互斥条件的原则,锁就没有意义,库存就会乱套。
这里面内容还能继续展开,涉及到的内容越来越多,越来越细,像剥笋一样,层层深入。