一、定义:当多个线程访问一个对象时,如果不用考虑这些线程“在运行时环境下的调度和交替执行”,“也不需要进行额外的同步”,或者“在调用方进行任何其他的协调操作”,调用这个对象的行为都可以获得正确的结果,那这个对象是完成安全的。
二、前提条件:多个线程之间存在共享数据访问(因为如果一段代码根本不会与其他线程共享数据,那么线程安全的角度来看,程序是串行还是多线程执行对它来说是完全没有区别的)。
三、线程安全的分类:不可变、绝对安全、相对线程安全、线程兼容和线程对立。
四、判断原则:先行发生(判断数据是否存在竞争、线程是否安全的主要依据,依靠这个原则和以下几条规则一揽子解决并发环境下两个操作之间是否存在冲突的所有问题)。
五、先行发生规则:程序次序规则、管程锁定规则、volatile变量规则、线程启动规则、线程终止规则、线程中断规则、线程终结规则、传递性。
六、实现线程安全的方法:互斥同步、非阻塞同步、线程本地存储