手机企业网站源码深圳龙岗有什么好玩的地方

news/2025/9/24 0:41:43/文章来源:
手机企业网站源码,深圳龙岗有什么好玩的地方,江门加盟网站建设,uiapp界面设计模板Condition 源码解析 文章目录 Condition 源码解析一、Condition二、Condition 源码解读2.1. lock.newCondition() 获取 Condition 对象2.2. condition.await() 阻塞过程2.3. condition.signal() 唤醒过程2.4. condition.await() 被唤醒后 三、总结 一、Condition 在并发情况下…Condition 源码解析 文章目录 Condition 源码解析一、Condition二、Condition 源码解读2.1. lock.newCondition() 获取 Condition 对象2.2. condition.await() 阻塞过程2.3. condition.signal() 唤醒过程2.4. condition.await() 被唤醒后 三、总结 一、Condition 在并发情况下进行线程间的协调如果是使用的 synchronized 锁我们可以使用 wait()/notify() 进行唤醒如果是使用的 Lock 锁的方式则可以使用 Condition 进行针对性的阻塞和唤醒相较于 wait()/notify() 使用起来更灵活。那么 Condition 是如何实现线程的等待和唤醒的呢本文通过解析Condition 的源码进行理解。 在进行源码分析前先通过一个案例看下 Condition 是如何使用的 public class Test {public synchronized static void main(String[] args) throws InterruptedException {Lock lock new ReentrantLock();Condition condition lock.newCondition();new Thread(() - {lock.lock();System.out.println(线程1开始等待);try {condition.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(线程1被唤醒继续执行结束);lock.unlock();}, 1).start();new Thread(() - {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}lock.lock();System.out.println(开始唤醒线程);condition.signal();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(线程2执行结束);lock.unlock();}, 2).start();} }运行之后可以看到下面日志 由于在第一个线程中使用的 condition.await() 因此当前线程会被阻塞挂起而第二个线程在 1s 后进行了 condition.signal() 操作因此第一个线程会被唤醒继续执行。这里可以发现第一个线程阻塞时锁并没有释放而第二个线程在1s后也成功拿到锁了所以表明在 condition.await() 时会自动释放当前锁这点和 wait() 相同在第二个线程进行了 condition.signal() 操作第一个线程并没有继续向下执行而是等待第二个线程处理完才会继续执行由此可以表明被唤醒的线程会重新获取锁成功获取锁后继续执行。 下面通过源码看下 Condition 是如何实现的等待唤醒。 二、Condition 源码解读 2.1. lock.newCondition() 获取 Condition 对象 首先看下在使用 lock.newCondition() 获取一个Condition 对象时具体做了什么这里以 ReentrantLock 为例进入到 ReentrantLock 的 newCondition() 方法中又执行了 Sync 的 newCondition() 方法再进去就会发现其实是 new 了一个 ConditionObject 类对象 下面点到这个类中可以看到其实是 AQS 下的一个子类 2.2. condition.await() 阻塞过程 了解到 Condition 的对象后可以看到是 AQS 下的一个子类那下面其他的方法也肯定依赖于 AQS 下面看下 condition.await() 方法点到 await() 方法中 其中 addConditionWaiter() 则是将自己加入到 AQS的队列中并获取到当前线程所在的 Node 这里注意下 Node 的状态是 Node.CONDITION 也就是 -2后面会依赖于该状态。 再回到 await() 方法继续向下看接着使用了 fullyRelease() 方法传入了当前的 Node 这里的 fullyRelease() 方法主要做了释放当前线程锁的操作可以看到又调用了 AQS 的 release() 进行释放资源也就是释放了当前所持有的锁。 回到 await() 方法中当释放锁后下面进入到了 while 循环中通过查看 isOnSyncQueue() 方法可以看到是符合while的条件也就可以进入到循环中 在循环中可以明显的看到 LockSupport.park(this) 将当前线程进行了阻塞。 2.3. condition.signal() 唤醒过程 上面已经看到线程被阻塞了如果需要被唤醒则需要通过condition.signal()这个方法是如何唤醒的呢 下面来到 AbstractQueuedSynchronizer 类的 signal() 方法中 主要执行了 doSignal() 方法再点到 doSignal() 中可以看到这里开启了一个循环对链表的每一个元素都进行了 transferForSignal() 操作这里也比较好理解就是要唤醒等待中的线程。 下面点到 transferForSignal() 中看下对每个 Node 都做了什么操作。点进去之后也比较好理解如果状态是 Node.CONDITION 也就是 -2刚才在解读 await() 方法时就提到这个状态了这里正好形成了呼应下面有个非常显眼的操作 LockSupport.unpark(node.thread) 直接唤醒了目标线程。也就是唤醒了 2.2 中的最后一步操作。 2.4. condition.await() 被唤醒后 当 await() 方法中的 LockSupport.park(this) 被唤醒后继续向下执行下面会判断下当前线程有没有被打断如果没被打断则 break 终止循环继续执行。 下面会使用 AQS 的 acquireQueued() 方法将先进入队列的线程进行抢占锁资源如果成功获取锁后就会继续执行如果抢占失败则继续被挂起阻塞。 三、总结 通过上面的源码分析应该对 Condition 有了新的理解和掌握在源码中好多地方都使用了 CAS 因此当竞争资源非常激烈时 Lock 的性能要远远优于 synchronized。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

厦门定制网站建设网站模板50元

第一部分 安装参考网址: https://blog.csdn.net/a1004084857/article/details/128512612; 以上步骤执行完,进入找到sbin目录,查看下面是不是有nginx可执行文件,如果有在当前sbin下执行./nginx,就会发现NGINX已启动 第…

做哪种类型的网站赚钱呢手机上怎么创建自己的网站

当我们在使用git的时候,又是会有这种情况:当新的需求了的时候。我们需要为此需求新建一个分支,再次分支上进行修改,当经过测试,提交代码时,在将其合并到主分支,或生产分支上。 但是有时候也有失…

外包网站推荐现在室内设计师好做吗

这段时间我们一直规划LSGO Group的学习网络平台,需求部分已经规划完毕,说做就做,开始搭建环境,由于利用PHPMYSQL技术,在服务器端首先安装了WAMPServer,以便提供Apache服务与MYSQL服务! 在代码的…

制作网页的流程步骤免费seo视频教学

AndroidStudio 很多时候会出现提示插件解析失败问题。可按如下步骤进行排查: 1. 翻墙后点击sync 按钮去同步;如果网络没问题,但一直同步失败,可试2. 2. C:\Users\[yourName]\.gradle\caches 中用git bash 等客户端工具去搜同步不…

鞍山市信息网站网站灰色建设

File/file 装入想要调试的可执行文件 run(r) 执行当前被调试的程序 kill(k) 终止正在调试的程序 quit(q) 退出gdb shell 使用户不离开gdb就可以执行Linux的shell命令 backtrace(bt) 回溯跟踪(当对代码进行调试时,run后…

南阳医疗网站制作价格网站建设应走什么会计科目

可以参照 Stanford大神DaphneKoller的概率图模型,里面贝叶斯网络一节讲到了explaining away。我看过之后试着谈谈自己的理解。 explainingaway指的是这样一种情况:对于一个多因一果的问题,假设各种“因”之间都是相互独立的,如果…

一例电动车充电器防反接电路分析

家里电动车充电器不充电了,经过拆开测试,二次侧输出电压正常;且输出线未出现断路,因此判断是防反接晶闸管故障,更换晶闸管后,电路正常工作。简略原理图如下:VCC为二次侧输出电源正极。该防反接电路,不是控正,…

做网站一天能接多少单windows 2008 wordpress

文章目录 前言一、数组的概念二、一维数组的定义三、一维数组的初始化四、一维数组的使用及举例1. 元素顺次前移的问题2. 数组元素逆序调整问题3. 统计输入的各个数据的个数 五、课后练习1. 从数组中查找某个元素2. 求一个数组中元素的平均值和均方差3. 编程统计某班某次考试的…

网站建设蓝图pptwordpress启用特色

在软件开发过程中,项目的构建是一个不可避免的环节。而随着项目规模的增大,手动管理编译过程变得越来越繁琐。为了简化构建流程并实现跨平台支持,CMake作为一种流行的构建系统被广泛采用。本文将介绍CMakeLists.txt文件的结构,以及…

套餐网站樊城网站建设

史上最全的JAVA面试题总结 为什么要做这件事情前言JAVA基础开发框架springSpringMVCmybatisdubbospringbootspringcloudnacos 数据库mysqloracle 缓存redismongodbElasticSearch 消息队列rabbitmqrocketmqkafka 监控prometheusgraylogzabbix 工具篇tcpdumpgitjenkins 容器docke…

烟台做网站价格石家庄正定网站建设

1、PTP模型 Point-to-Point,点对点通信模型。PTP是基于队列(Queue)的,一个队列可以有多个生产者,和多个消费者。消息服务器按照收到消息的先后顺序,将消息放到队列中。队列中的每一条消息,只能由一个消费者进行消费&a…

做的漂亮的家居网站做网站业务员

计算机基础知识同步练习题一、判断题下列各题中,您认为对的请在括号中填入“是” ,错的填入“非” 。1. 世界上第一台电子计算机是 1946 年在美国研制成功的。 ( )2. 电子计算机的用途是进行各种科学研究的数值计算。 ( )3. 电子计算机的计算速度很快但计…

太原做网站直通车17网站一起做网店优势与劣势

一、自定义信号,信号emit 1、自定义信号 在头文件中 加入signals: 就可以编写信号 2、emit emit的作用是通知信号发生 二、跨UI控件传参 每次按Dialog添加按钮主控件数字会增长 // .h private slots:void on_btnAdd_clicked(); signals:void sign…

凡科建设网站怎样收录百度政务网站建设需求

JWT(JSON Web Token)是一种基于 JSON 格式的轻量级令牌(token)协议,它被广泛应用于网络应用程序的身份验证和授权。相较于传统的 session-based 认证机制,JWT 具有更好的扩展性和互操作性,同时也…

营销型网站建设细节网站开发与运用

数据预处理是数据分析过程中至关重要的一步,它涉及到清洗、转换和整理原始数据,以便更好地适应分析模型或算法。以下是一些常见的数据预处理方法和规则: 数据清洗: 处理缺失值:检测并处理数据中的缺失值,可…

自己做的网站如何在网络上展示软件开发交付流程

文章目录 前言    文章目录 前言 一、指针运算 1.指针-整数 2.指针-指针 3.指针关系运算 二、野指针 1.概念 2.野指针的成因 1.未初始化 2.指针越界访问 3.指针指向的空间释放 3.避免野指针 1.指针初始化 2.小心指针越界 3. 指针变量不再使用时,及时置NULL 总结 …

网站建设能赚多少钱优化方案2022

前言 由于用户越来越注重 Web应用 的使用体验,随之而来的是 Web应用 需要提供了更加完善的 Web 动画 效果来实现以平滑的状态贯穿于用户的整个使用过程中。现在,这已经是司空见惯了,用户潜意识是希望可以获得更快的反馈响应和更友好的用户界…

如何做二级域名网站网络营销推广策划的步骤

一、Condition Condition 是在 Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。比如说,只有满足某一个条件才能创建这个 Bean,否则就不创建。 SpringBoot 是如何知道要创建哪个 Bean 的?比如 Sp…

情侣博客网站模板下载微营销平台

关于导入三方SDK.framework之后,启动崩溃之后如下报错的解决方式: 截屏2020-10-14 上午9.55.09.png 在正常导入framework之后,做如图示操作, image.png 以上步骤之后,重新启动运行xcode,即可成功运行。

人设生成器网站做移动端活动页面参考网站

日期/时间类型是一种数据类型,用于表示日期和时间的值。在PostgreSQL数据库中,日期/时间类型通常包括以下几种形式: 名字存储大小描述最低值最高值最小单位timestamp [(p)][without time zone]8字节日期和时间(无时区公元前4713年294276 AD1…