java多线程如何同步
Java多线程同步方法
Java提供了多种机制来实现多线程同步,确保线程安全。以下是常用的同步方法:
synchronized关键字
synchronized可用于方法或代码块,确保同一时间只有一个线程能访问被保护的资源。
public synchronized void synchronizedMethod() {
// 线程安全的代码
}
public void method() {
synchronized(this) {
// 线程安全的代码块
}
}
ReentrantLock类
ReentrantLock是java.util.concurrent.locks包中的显式锁,提供比synchronized更灵活的锁定机制。
private final ReentrantLock lock = new ReentrantLock();
public void method() {
lock.lock();
try {
// 线程安全的代码
} finally {
lock.unlock();
}
}
volatile关键字
volatile确保变量的可见性,但不保证原子性。适用于单个变量的简单操作。

private volatile boolean flag = false;
原子类
java.util.concurrent.atomic包提供原子类,如AtomicInteger,适用于简单的原子操作。
private AtomicInteger counter = new AtomicInteger(0);
public void increment() {
counter.incrementAndGet();
}
CountDownLatch
CountDownLatch允许一个或多个线程等待其他线程完成操作。

CountDownLatch latch = new CountDownLatch(3);
// 线程中调用
latch.countDown();
// 主线程等待
latch.await();
CyclicBarrier
CyclicBarrier让一组线程互相等待,到达屏障点后再继续执行。
CyclicBarrier barrier = new CyclicBarrier(3);
// 线程中调用
barrier.await();
Semaphore
Semaphore控制同时访问资源的线程数量。
Semaphore semaphore = new Semaphore(3);
public void method() throws InterruptedException {
semaphore.acquire();
try {
// 线程安全的代码
} finally {
semaphore.release();
}
}
线程安全的集合类
java.util.concurrent包提供线程安全的集合类,如ConcurrentHashMap。
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
选择同步方法时需根据具体场景权衡性能、复杂度和需求。






