当前位置:首页 > Java

java如何实现多线程同步

2026-03-17 18:25:32Java

Java 多线程同步的实现方法

Java 提供了多种机制来实现多线程同步,确保线程安全。以下是常见的实现方式:

synchronized 关键字

synchronized 可以修饰方法或代码块,确保同一时间只有一个线程可以访问被保护的资源。

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

ReentrantLock

ReentrantLockjava.util.concurrent.locks 包中的类,提供了比 synchronized 更灵活的锁机制。

java如何实现多线程同步

import java.util.concurrent.locks.ReentrantLock;

public class Counter {
    private int count = 0;
    private ReentrantLock lock = new ReentrantLock();

    public void increment() {
        lock.lock();
        try {
            count++;
        } finally {
            lock.unlock();
        }
    }
}

volatile 关键字

volatile 确保变量的可见性,但不保证原子性。适用于简单的状态标志。

public class VolatileExample {
    private volatile boolean flag = false;

    public void toggleFlag() {
        flag = !flag;
    }
}

Atomic 类

java.util.concurrent.atomic 包提供了原子类(如 AtomicInteger),适合计数器等场景。

java如何实现多线程同步

import java.util.concurrent.atomic.AtomicInteger;

public class Counter {
    private AtomicInteger count = new AtomicInteger(0);

    public void increment() {
        count.incrementAndGet();
    }
}

CountDownLatch

CountDownLatch 允许一个或多个线程等待其他线程完成操作。

import java.util.concurrent.CountDownLatch;

public class Worker implements Runnable {
    private final CountDownLatch latch;

    public Worker(CountDownLatch latch) {
        this.latch = latch;
    }

    @Override
    public void run() {
        // 执行任务
        latch.countDown();
    }
}

Semaphore

Semaphore 控制同时访问特定资源的线程数量。

import java.util.concurrent.Semaphore;

public class ResourcePool {
    private Semaphore semaphore = new Semaphore(3); // 允许3个线程同时访问

    public void accessResource() {
        try {
            semaphore.acquire();
            // 访问资源
        } finally {
            semaphore.release();
        }
    }
}

CyclicBarrier

CyclicBarrier 让一组线程互相等待,到达屏障点后再继续执行。

import java.util.concurrent.CyclicBarrier;

public class Task implements Runnable {
    private CyclicBarrier barrier;

    public Task(CyclicBarrier barrier) {
        this.barrier = barrier;
    }

    @Override
    public void run() {
        // 执行任务
        barrier.await(); // 等待其他线程
    }
}

选择同步方法的建议

  • 简单同步需求使用 synchronized
  • 需要更灵活的锁控制时使用 ReentrantLock
  • 状态标志使用 volatile
  • 计数器等场景使用原子类。
  • 线程间协作使用 CountDownLatchSemaphoreCyclicBarrier

分享给朋友:

相关文章

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

js多线程如何简单实现

js多线程如何简单实现

JavaScript 多线程的简单实现方法 JavaScript 本身是单线程的,但可以通过 Web Workers 实现多线程操作。Web Workers 允许在后台运行脚本,独立于主线程执行任务。…

vue如何实现滤镜

vue如何实现滤镜

Vue 实现滤镜的方法 在 Vue 中实现滤镜效果可以通过多种方式,以下是常见的几种方法: 使用 CSS filter 属性 通过 CSS 的 filter 属性可以直接为元素添加滤镜效果。在 Vu…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现多态的三…

React如何实现通知

React如何实现通知

React 实现通知的方法 使用状态管理 在 React 组件中通过 useState 或 useReducer 管理通知状态,触发状态更新时显示通知。适合简单场景,无需额外依赖。 import {…