Java多线程同步问题:锁、信号量和条件变量实战 原创 曾经终败给现在 2024-09-19 11:51 7阅读 0赞 在Java多线程编程中,锁(Lock)、信号量(Semaphore)和条件变量(Condition Variable)是三种常用的同步工具。 1. 锁(Lock): - `synchronized`关键字实现同步。 - 适用于互斥访问资源的场景。 2. 信号量(Semaphore): - 定义一个资源,资源数量有限。 - 当线程需要使用资源时,通过`wait()`方法减小资源计数,然后进入等待状态;当资源可用时,通过`signal()`或`notifyAll()`方法增加资源计数,唤醒等待的线程。 3. 条件变量(Condition Variable): - 用于实现线程间的同步条件,比如:两个线程需要互斥执行某个操作,或者等待特定事件发生等场景。 - 当满足某些条件时,线程可以通过`wait()`方法进入等待状态;当条件不满足或某个线程通知其他线程时,可以通过`notifyAll()`或`notify()`方法唤醒等待的线程。 实战示例: ```java import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class MultiThreadSynchronization { private final Lock lock = new ReentrantLock(); private final Condition condition = lock.newCondition(); public void syncWithSignal() throws InterruptedException { lock.lock(); try { System.out.println("线程1等待..."); // 线程2到达,通过条件变量唤醒线程1 if (condition.signalAll()) { System.out.println("线程1被唤醒并执行..."); // 模拟耗时操作 Thread.sleep(3000); } } finally { lock.unlock(); } } public static void main(String[] args) { MultiThreadSynchronization sync = new MultiThreadSynchronization(); new Thread(() -> { try { sync.syncWithSignal(); System.out.println("线程2执行完毕..."); } catch (InterruptedException e) { e.printStackTrace(); } // 在这里可以模拟其他操作,不影响主线程 })).start(); // 主线程等待子线程执行完毕 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程执行完毕..."); } } ``` 在这个例子中,我们创建了两个线程:`线程1`和`线程2`。线程1等待条件满足后(由线程2唤醒),执行耗时操作。 在主程序中,主线程会等待子线程执行完毕,然后执行自己的业务逻辑。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java多线程同步问题:锁、信号量和条件变量实战 在Java多线程编程中,锁(Lock)、信号量(Semaphore)和条件变量(Condition Variable)是三种常用的同步工具。 1. 锁(Lock): - 曾经终败给现在/ 2024年09月19日 11:51/ 0 赞/ 8 阅读
相关 Java多线程同步问题:锁、信号量及ReentrantLock的实战案例 在Java多线程编程中,锁、信号量和`ReentrantLock`都是用于线程同步的重要工具。下面我们将通过实际案例来展示它们的应用。 1. **锁(Synchronized 古城微笑少年丶/ 2024年09月17日 11:36/ 0 赞/ 5 阅读
相关 多线程同步问题:Java互斥锁与条件变量实例 在Java中,互斥锁和条件变量是多线程同步的两种主要手段。下面我将分别提供这两种工具的使用实例。 1. 互斥锁(Synchronized Lock) ```java pub た 入场券/ 2024年09月16日 06:04/ 0 赞/ 10 阅读
相关 Java多线程同步问题:锁、信号量与条件变量实例 在Java中,线程同步主要通过以下几种机制实现: 1. 锁(Lock) - ReentrantLock: 可重入锁,允许多个线程在同一时刻获取锁,但要求线程在持有锁期间不能被 以你之姓@/ 2024年09月14日 16:42/ 0 赞/ 13 阅读
相关 Java多线程同步问题:信号量案例展示 在Java中,信号量是一种用于控制对共享资源访问的机制。以下是一个简单的信号量示例: ```java import java.util.concurrent.Semaphor 梦里梦外;/ 2024年09月10日 23:00/ 0 赞/ 21 阅读
相关 Java多线程通信:信号量、条件变量等问题 在Java中,多线程之间的通信可以通过多个机制实现,包括但不限于: 1. **信号量(Semaphore)**: - 信号量是一个计数器,初始值可以是0或大于0的整数。 ╰半橙微兮°/ 2024年09月05日 21:48/ 0 赞/ 15 阅读
相关 Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁) 转载:[https://blog.csdn.net/qq\_41248872/article/details/82991949][https_blog.csdn.net_qq_ 喜欢ヅ旅行/ 2023年01月22日 10:58/ 0 赞/ 70 阅读
相关 线程同步中的锁和信号量 由于工作上用到线程之间的同步,而且有超时处理,问题是:子主线程等待的时候已经加锁了,为什么主线程中还可以再去加锁给子线程发送信号呢? pthread\_cond\_ti 墨蓝/ 2022年12月17日 02:25/ 0 赞/ 119 阅读
相关 C线程,线程池,信号量,锁以及使用条件变量相关 文章目录 线程 线程池 互斥锁 使用条件变量+互斥锁实现生产者消费者 使用信号量实现生产者消费者 线程 include <p 淩亂°似流年/ 2022年12月11日 02:20/ 0 赞/ 130 阅读
还没有评论,来说两句吧...