这篇文章算是对前面几篇文章的一个小结,从Java内存模型是如何来保证并发操作过程中的原子性、可见性以及有序性,到Happes-Before原则是如何保证内存模型中操作的有序性,再到我们特意分析了volatile和synchronized这两个JVM内置的实现同步机制关键字,在内存模型中的作用和他们的区别,但是这中间总是离不开「线程安全」几个字,那么实现线程安全的方法究竟有哪些,本文试图做一下总结。
线程安全的概念
周老师认为《Java Concurrency In Practice》的作者Brian Goetz对线程安全有个比较好的定义,如下:
当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。