Effective Java - 同步访问共享的可变数据

        这一章的主题是并发,第一篇讲的是线程同步问题,这里面主要是提到了两个概念,一个是活性失败,另一个是安全性失败。

        首先是活性失败,这一个概念我个人的理解是同一个可变数据在被多个线程中的一个修改后,并没有被其他线程观察到,从而导致出现线程问题。这一个问题可以用volatile关键字来解决。


在外面的flag已经被改成了2,但子线程无法访问到这个结果导致while循环变成死循环,线程无法结束

        当上面例子代码中的flag加上volatile,这个flag就是线程间可见的了。


在flag加上volatile之后就可以结束线程中的while循环了

        第二个安全性失败从书中的表述来看其实就是在某个时间或者情况下,原本应该返回不同的数据,但是返回了相同的数据从而产生了错误的结果。

        最后,能避免线程同步的情况就尽量避免,将可变数据限制在单个线程内。如果无法避免的话,每个读和写的线程都必须执行同步。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容