https://www.cnblogs.com/tcming/p/6711506.html
1. 一个对象是否需要时线程安全的,取决于该对象是否被多线程访问。这指的是程序中访问对象的方式,而不是对象要实现的功能。要使得对象是线程安全的,要采用同步机制来协同对对象可变状态的访问。Java常用的同步机制是Synchronized,还包括 volatile类型的变量,显示锁以及原子变量。
2.线程安全?
多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么这个类就是安全的。
正确性:某个类的行为和规范一致。
3.原子性:保证读-修改-写
4.加锁机制:
内置锁:以对象作为实现同步的锁
重入锁:获取锁的操作的粒度是“线程”而不是“调用”
用锁来保证状态,对于每个包含多个变量的不变性条件,其中涉及的所有变量都使用一个锁来保护/同步。