Java并发编程实战
线程安全是指什么意思?
线程安全是指对象的状态在多线程中能被正确的访问,对象的状态一般是指实例变量,而正确是指对象的行为与其规范保持一致。
那么为什么对象的状态会存在不正确的访问呢?
因为对象的状态可能是共享的、可变的。在多个线程同时访问某个对象(共享)并修改该对象(可变)时,由于操作系统切换上下文的不可预估性,可能导致线程的操作被中断,中断期间其他线程也对该对象进行修改,那么当之前被中断的线程恢复执行时,该对象的状态已经被修改了,该对象接下来的行为可能就与开始的规范不一致。
竞态条件与数据竞争?
竞态条件(Race Condition)是指结果受限于行为执行时序的场景,最常见的竞态条件是“先检查后执行”的操作,因为检查的状态可能是已经失效的状态
数据竞争(Race Data)是指多个行为同时对某个数据进行操作的场景
锁
内置锁:
监视器锁:
互斥锁:最多一个线程持有