Java微服务架构师_Java 并发编程_007_AQS与Condition队列

本文通过示例代码及图解详细解析了Java并发包中Condition类的阻塞与唤醒机制,包括线程如何等待Condition信号及如何发出信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JUC中的Condition类的阻塞与唤醒执行原理

直接看源码还是有些不太容易的,毕竟里面包含ASQ 与 线程阻塞唤醒机制。

以下 是个人阅读源码时整理的一个关于Condition的阻塞与唤醒机制的图示说明,大家可以参考,希望帮助到大家。

processon 原图地址:
https://www.processon.com/diagraming/5fa8ddb2637689653d8ed087

演示代码:

package com.example.demo;

import com.fasterxml.jackson.datatype.jsr310.deser.key.LocalDateKeyDeserializer;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TestDmoe {
    public static void main(String[] args) {
        final Lock lock = new ReentrantLock();
        Condition condition = lock.newCondition();

        Thread threadA = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("threadA =========START=======await>");
                    lock.lock();
                    condition.await();
                    System.out.println("threadA =========END========await>");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }

            }
        }, "threadA");


        Thread threadB = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("threadB =========START========signal>");
                    lock.lock();
                    condition.signal();
                    System.out.println("threadB =========END========signal>");
                } finally {
                    lock.unlock();
                }

            }
        }, "threadB");

        threadA.start();
        threadB.start();
    }
}

执行效果:
在这里插入图片描述

图解原理:

绿色为步骤一

在这里插入图片描述
红色为步骤二
在这里插入图片描述
上面是全局视角展示的执行逻辑,下面举例几个核心代码细节进行分析

源码细节分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值