java 如何同步助手
Java 同步助手实现方法
Java中实现同步功能通常涉及多线程协调,确保线程安全。以下是几种常见的同步方法:
使用 synchronized 关键字
synchronized 可用于方法或代码块,确保同一时间只有一个线程执行该代码。
public class SynchronizedExample {
private int count = 0;
public synchronized void increment() {
count++;
}
}
使用 ReentrantLock
ReentrantLock 提供更灵活的锁定机制,支持公平锁、尝试锁定等特性。
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}
使用 volatile 关键字
volatile 保证变量的可见性,但不保证原子性。
public class VolatileExample {
private volatile boolean flag = false;
public void toggle() {
flag = !flag;
}
}
使用原子类
java.util.concurrent.atomic 包提供原子操作类,如 AtomicInteger。
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicExample {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
}
使用 CountDownLatch
CountDownLatch 允许一个或多个线程等待其他线程完成操作。
import java.util.concurrent.CountDownLatch;
public class LatchExample {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3);
new Thread(() -> {
// do work
latch.countDown();
}).start();
latch.await();
}
}
使用 CyclicBarrier
CyclicBarrier 让一组线程互相等待,到达屏障时再继续执行。

import java.util.concurrent.CyclicBarrier;
public class BarrierExample {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3);
for (int i = 0; i < 3; i++) {
new Thread(() -> {
try {
barrier.await();
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
}
选择哪种同步方法取决于具体场景需求。synchronized 最简单但灵活性较低,ReentrantLock 提供更多控制,原子类适合简单计数器场景,CountDownLatch 和 CyclicBarrier 适合线程协调。






