美文网首页
使用不可变状态的原因隐藏的可变状态逃逸的可变状态

使用不可变状态的原因隐藏的可变状态逃逸的可变状态

作者: 每天学点编程 | 来源:发表于2018-02-21 18:44 被阅读21次

请关注我的微信公众号

个人微信公众号

技术交流群 (仅作技术交流):642646237

​请关注我的头条号:

使用不可变状态的原因——隐藏的可变状态

下面这个类没有使用可变状态,看上去肯定是线程安全的:

但是实际上并不是,原因是SimpleDateFormmat内部有隐藏的可变状态。
Java这类语言为了让代码写起来简单,在此隐藏了可变状态,这也使用户无法判断何时会发生问题——从API无法判断SimpleDateFormat是否是线程安全的。

使用不可变状态的原因——逃逸的可变状态

players是私有变量,仅被addPlayer()getPlayerIterator()使用,且两个方法都标记了synchronized
然而它并不是线程安全的,因为getPlayerIterator()返回的迭代器仍引用了players内部的可变状态——如果在迭代器被使用时,另一个线程调用了addPlayer()方法,那么程序就会抛出ConcurrentModificationException或者变得更糟。

并发编程可变状态导致的风险

在并发编程中,隐藏和逃逸仅仅是两种可变状态带来的风险——还有很多其他风险。

相关文章

网友评论

      本文标题:使用不可变状态的原因隐藏的可变状态逃逸的可变状态

      本文链接:https://www.haomeiwen.com/subject/xwfotftx.html