public class VolatileFlag {
private volatile boolean running = true;
public void run() {
while (running) {
// 执行业务
}
System.out.println("线程停止");
}
public void stop() {
running = false;
}
}
volatile 保证其他线程能及时看到 running 的变化。
2.2 synchronized 示例(同步临界区)
public class SynchronizedCounter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
使用锁保证 increment() 和 getCount() 原子性和一致性。
2.3 AtomicInteger 示例(高效原子操作)
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}
AtomicInteger 通过 CAS 操作无锁实现原子递增。
3. 适用场景
需求类型
推荐使用
简单的状态标记
volatile
需要互斥同步代码块
synchronized
高性能原子计数器
AtomicInteger
4. 性能简析
volatile:成本最低,只保证可见性和禁止重排序,不涉及锁,性能最佳。
synchronized:涉及阻塞和上下文切换,性能开销较大,适合保护复杂临界区。
AtomicInteger:基于硬件 CAS 指令,无锁且原子,性能优于 synchronized,适合简单原子操作。
发表回复