梳理一下Java中为保证线程安全提供了那些方案

我对线程安全的理解

线程安全问题是由并发编程引起的,如果一个数据由多个线程访问和修改。在并发状态下,一个线程安全对象的内部状态,无论操作系统如何调度或交错执行线程都能保持一致性则认为是线程安全的。

同步机制 加锁

synchronized 关键字

对方法或代码块加锁(在JVM层面)
当我们使用synchronized时,Java虚拟机(JVM)会为每个被同步的对象维护一个锁(或称为监视器锁)。
这个锁有四种状态:从级别由低到高依次是:无锁、偏向锁,轻量级锁,重量级锁,用于控制多线程对共享资源的访问。

Lock 接口

java.util.concurrent.locks 包中提供了比 synchronized 更灵活的锁机制,例如 ReentrantLock,支持中断、超时以及公平锁等特性

线程局部变量

ThreadLocal:: 为每个线程创建一个独立的变量副本,避免了线程之间的数据干扰。

volatile关键字

可见性 :volatile 保证变量修改的可见性,确保一个线程对变量的修改对其他线程是**可见的*(通过强制从主内存读写数据来实现)。

同时保证了变量的有序性,java编译器会在生成指令系列时在适当的位置会插入内存屏障

但它不能保证对变量的复合操作是原子性的。

posted @ 2025-10-12 15:43  浪矢-CL  阅读(8)  评论(0)    收藏  举报