梳理一下Java中为保证线程安全提供了那些方案
目录
我对线程安全的理解
线程安全问题是由并发编程引起的,如果一个数据由多个线程访问和修改。在并发状态下,一个线程安全对象的内部状态,无论操作系统如何调度或交错执行线程都能保持一致性则认为是线程安全的。
同步机制 加锁
synchronized 关键字
对方法或代码块加锁(在JVM层面)
当我们使用synchronized时,Java虚拟机(JVM)会为每个被同步的对象维护一个锁(或称为监视器锁)。
这个锁有四种状态:从级别由低到高依次是:无锁、偏向锁,轻量级锁,重量级锁,用于控制多线程对共享资源的访问。
Lock 接口
java.util.concurrent.locks 包中提供了比 synchronized 更灵活的锁机制,例如 ReentrantLock,支持中断、超时以及公平锁等特性
线程局部变量
ThreadLocal:: 为每个线程创建一个独立的变量副本,避免了线程之间的数据干扰。