网站后台英文重庆市建设工程施工安全管理网站

web/2025/10/2 14:22:12/文章来源:
网站后台英文,重庆市建设工程施工安全管理网站,南京百度推广优化排名,企业网站优秀案例概述 ● 一个int成员变量 state 表示同步状态 ● 通过内置的FIFO队列来完成资源获取线程的排队工作 属性 AbstractQueuedSynchronizer属性 /*** 同步队列的头节点 */private transient volatile Node head;/*** 同步队列尾节点#xff0c;enq 加入*/private transient …概述 ● 一个int成员变量 state 表示同步状态 ● 通过内置的FIFO队列来完成资源获取线程的排队工作 属性 AbstractQueuedSynchronizer属性 /*** 同步队列的头节点 */private transient volatile Node head;/*** 同步队列尾节点enq 加入*/private transient volatile Node tail;/*** 同步状态*/private volatile int state;/*** 获取状态*/protected final int getState() {return state;}/*** 设置状态*/protected final void setState(int newState) {state newState;}/*** CAS 设置状态*/protected final boolean compareAndSetState(int expect, int update) {// See below for intrinsics setup to support thisreturn unsafe.compareAndSwapInt(this, stateOffset, expect, update);}/*** The number of nanoseconds for which it is faster to spin* rather than to use timed park. A rough estimate suffices* to improve responsiveness with very short timeouts.*/static final long spinForTimeoutThreshold 1000L;Node 节点属性 static final class Node {/** 共享节点 */static final Node SHARED new Node();/** 独占节点 */static final Node EXCLUSIVE null;// 在同步队列中等待的线程等待超时或被中断, 需要从同步队列中取消等待, 状态不会变化 |static final int CANCELLED 1;// 后继节点处于等待状态, 当前节点释放了同步状态或者被取消, 通知后续节点, 使后续节点得以运行static final int SIGNAL -1;// 值为-2, 节点在等待队列, 当其他线程 signal(),从等待队列中移除到同步队列中 |static final int CONDITION -2;// 值为-3, 下一次共享获取同步状态将会无条件传播下去static final int PROPAGATE -3;/*** 节点初始状态初始化为0*/volatile int waitStatus;/*** 前一个节点*/volatile Node prev;/*** 后一个节点*/volatile Node next;/** 节点的线程*/volatile Thread thread;/*** 下一个等待者*/Node nextWaiter;/*** 是否是共享节点*/final boolean isShared() {return nextWaiter SHARED;}/*** 前一个节点*/final Node predecessor() throws NullPointerException {Node p prev;if (p null)throw new NullPointerException();elsereturn p;}Node() { // Used to establish initial head or SHARED marker}Node(Thread thread, Node mode) { // Used by addWaiterthis.nextWaiter mode;this.thread thread;}Node(Thread thread, int waitStatus) { // Used by Conditionthis.waitStatus waitStatus;this.thread thread;}}常用方法 同步状态的三个方法 ● getState() 获取同步状态 ● setState(int newState) 设置当前同步状态 ● compareAndSetState(int expect, int update) CAS设置同步状态,原子操作 AbstractQueuedSynchronizer可重写的方法 方法名称方法描述boolean tryAcquire(int arg)独占式获取同步状态查询当前状态是否符合预期并且CAS设置boolean tryRelease(int arg)独占式释放同步状态释放后等待获取同步状态的线程有机会获取同步状态int tryAcquireShared(int arg)共享式获取同步状态如果大于等于0表示获取成功boolean tryReleaseShared(int arg)共享式释放同步状态boolean isHeldExclusively()在独占模式下被线程占用表示是否被当前线程独占 AbstractQueuedSynchronizer提供的模版方法 方法名称方法描述boolean acquire(int arg)独占式获取同步状态, 成功返回, 失败队列等待, 调用tryAcquire()boolean acquireInterruptibly(int arg)acquire 相同, 但是可以中断int tryAcquireNanos(int arg, long nanos)acquireInterruptibly 基础上增加了超时限制, 超时返回false, 返回trueacquireShared(int arg)共享式获取同步状态, 和acquire差不多, 区别是同一时刻可以有多个线程获取同步状态acquireSharedInterruptibly(int arg)acquireShared 相同, 但是可以中断int tryAcquireSharedInterruptibly(int arg, long nanos)acquireSharedInterrup 流程图 流程图主要方法源码阅读 acquire 独占式获取同步状态, 成功返回, 失败队列等待 public final void acquire(int arg) {// tryAcquire获取信号量// 如果失败 tryAcquire(arg)false addWaiter入队列、acquireQueued 排队获取锁if (!tryAcquire(arg) acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt(); }final boolean acquireQueued(final Node node, int arg) {boolean failed true;try {boolean interrupted false;for (;;) {// 前一个节点是头节点 尝试获取锁 获取锁成功 设置自己为头节点 final Node p node.predecessor();if (p head tryAcquire(arg)) {setHead(node);p.next null; // help GCfailed false;return interrupted;}// 前面节点设置为 singal自己就可以睡眠了if (shouldParkAfterFailedAcquire(p, node) parkAndCheckInterrupt())// 被中断 尝试获取信号量interrupted true;}} finally {if (failed)cancelAcquire(node);} }addWaiter 节点进入同步队列 private Node addWaiter(Node mode) {// 创建节点Node node new Node(Thread.currentThread(), mode);// Try the fast path of enq; backup to full enq on failureNode pred tail;// 尾节点不为空if (pred ! null) {// 设置当前节点的前一个节点为尾节点node.prev pred;// cas 设置自己为尾节点if (compareAndSetTail(pred, node)) {pred.next node;return node;}}// 尾节点为空 或 cas 设置自己为尾节点失败了enq(node);return node;}/*** 入队*/private Node enq(final Node node) {for (;;) {Node t tail;// 尾节点为空设置新的头节点if (t null) { // Must initializeif (compareAndSetHead(new Node()))tail head;} else {// 设置当前节点的前一个节点为尾节点node.prev t;// cas 设置自己为尾节点if (compareAndSetTail(t, node)) {t.next node;return t;}}}}shouldParkAfterFailedAcquire 前面节点设置为 singal设置成功返回true失败false private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {int ws pred.waitStatus;// 前面的节点SIGNAL自己就可以park了if (ws Node.SIGNAL)return true;if (ws 0) {// 找到第一个不是取消状态的节点do {node.prev pred pred.prev;} while (pred.waitStatus 0);pred.next node;} else {/** 设置 WaitStatus SIGNAL*/compareAndSetWaitStatus(pred, ws, Node.SIGNAL);}return false;}parkAndCheckInterrupt private final boolean parkAndCheckInterrupt() {LockSupport.park(this);return Thread.interrupted();}acquireInterruptibly acquire 相同, 但是可以中断 public final void acquireInterruptibly(int arg)throws InterruptedException {// 被中断抛出InterruptedExceptionif (Thread.interrupted())throw new InterruptedException();if (!tryAcquire(arg))doAcquireInterruptibly(arg);}private void doAcquireInterruptibly(int arg)throws InterruptedException {final Node node addWaiter(Node.EXCLUSIVE);boolean failed true;try {for (;;) {final Node p node.predecessor();if (p head tryAcquire(arg)) {setHead(node);p.next null; // help GCfailed false;return;}if (shouldParkAfterFailedAcquire(p, node) parkAndCheckInterrupt())// 被中断抛出InterruptedExceptionthrow new InterruptedException();}} finally {if (failed)cancelAcquire(node);} tryAcquireNanos acquireInterruptibly 基础上增加了超时限制, 超时返回false, 返回true public final boolean tryAcquireNanos(int arg, long nanosTimeout)throws InterruptedException {if (Thread.interrupted())throw new InterruptedException();return tryAcquire(arg) ||doAcquireNanos(arg, nanosTimeout);}private boolean doAcquireNanos(int arg, long nanosTimeout)throws InterruptedException {if (nanosTimeout 0L)return false;final long deadline System.nanoTime() nanosTimeout;final Node node addWaiter(Node.EXCLUSIVE);boolean failed true;try {for (;;) {final Node p node.predecessor();if (p head tryAcquire(arg)) {setHead(node);p.next null; // help GCfailed false;return true;}nanosTimeout deadline - System.nanoTime();// 超时返回falseif (nanosTimeout 0L)return false;if (shouldParkAfterFailedAcquire(p, node) nanosTimeout spinForTimeoutThreshold)// park指定时间LockSupport.parkNanos(this, nanosTimeout);// 中断抛出异常if (Thread.interrupted())throw new InterruptedException();}} finally {if (failed)cancelAcquire(node);}} release 释放信号量 如果头节点不为空 状态为SINGAL, 唤醒头节点的下一个节点 public final boolean release(int arg) {if (tryRelease(arg)) {// 释放arg信号量成功Node h head;// 如果头节点不为空 状态为SINGAL, 唤醒头节点的下一个节点if (h ! null h.waitStatus ! 0)unparkSuccessor(h);return true;}return false; }private void unparkSuccessor(Node node) {int ws node.waitStatus;// 唤醒先修改waitStatus从SINGAL-0初始化if (ws 0)compareAndSetWaitStatus(node, ws, 0);// 找到node之后第一个不被取消的节点 LockSupport.unpark唤醒该节点Node s node.next;if (s null || s.waitStatus 0) {s null;for (Node t tail; t ! null t ! node; t t.prev)if (t.waitStatus 0)s t;}if (s ! null)LockSupport.unpark(s.thread); }参考文献 Java并发编程的艺术第二版 方腾飞、魏鹏、程晓明

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

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

相关文章

网站建设作业指导书公司怎么建立自己网站

摘要安全多方计算几何(SMCG)是安全多方计算的一个分支。该协议是为SMCG中安全的多方凸包计算而设计的。首先,提出了一种基于量子同态加密的安全双方值比较协议。由于量子同态加密的性质,该协议可以很好地保护量子电路执行过程中数据的安全性和各方之间的…

网站用户注册增加办法濮阳建设公司网站

java中string与date(日期)格式之间的转换 经常遇到string和date之间的转换,把相关的内容总结在这里吧: 1.string格式转化为Date对象: //把string转化为dateDateFormat fmt new SimpleDateFormat("yyyy-MM-dd"); Date date fmt.par…

淘宝不允许 网站建设已经有域名如何做网站

jvm ide有没有想过为什么Eclipse / Netbeans会一直暂停一段时间? 特别是当您想向亲爱的同事展示代码中的内容时? 感到尴尬和尴尬,不是吗? 我发现大多数情况下IDE会由于执行垃圾收集器而暂停。 JVM设计中的微妙元素很少起作用&…

建设自己的二手房中介网站网站的内容管理

类加载器负责把类加载到java虚拟机即JVM中,指定类的名称,类加载器就会定位这个类的定义,每一个java类必须由类加载器加载。 当启动JVM的时候,我们可以使用三个类加载器:引导类加载器、扩展类加载器、应用程序类加载器 …

河南省建设工程质量协会网站wordpress 产品展示插件

2023年7月7日-9日,华为开发者大会2023(Cloud)在东莞松山湖隆重举行。期间,华为云主办了以“AI‘邂逅’一站式软件开发,CodeArts以10倍效能“绘”企业应用远景”为主题的分论坛。 华为云PaaS服务产品部副部长汪维敏携一…

网址怎么申请网站免费素材网免费素材图库

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本售楼管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

网站开发报价单.docwordpress 应用模板下载

文章目录 版权声明准备:MYSQL数据库数据库简介数据库分类数据库管理系统SQL语句关系型数据库中核心元素MySQL环境搭建Mysql数据类型数据完整性和约束MYSql基本操作登录和退出数据库命令数据库基本操作命令数据表基本操作命令数据表结构修改命令表数据操作命令Mysql查…

建设单位经常去哪个网站织梦网站如何上传

#include<iostream> #include<vector> using namespace std; int singleNumber(vector<int>& nums) {int eo 0;for (auto b : nums)eo ^ b;return eo; }

企业网站模板 下载 论坛淘宝官网登录入口

JSAP &#xff08; Java Simple Argument Parser &#xff09;2.1是本系列文章的第二十篇&#xff0c;重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因&#xff1a;“我在Internet上找到了几个解析器&#xff0c;所有解析器都处理了开关&#xff0c;但是在解析返回…

网站建设作中国icp备案的有多少企业网站

汽车电子拓扑架构的演进过程 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…

网站开发职业定位网站如何快速被收录

HTTP 基本架构下面我们用一张简单的流程图来展示 HTTP 协议基本架构&#xff0c;以便大家先有个基本的了解Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求&#xff0c;并返回给Web Client 可识…

网站建设哪里找广州市数商云网络科技有限公司

文章目录 ⭐⭐⭐Spring核心源码分析自定义Spring框架⭐⭐⭐一、Spring使用回顾二、Spring核心功能结构1、Spring核心功能2、bean概述 三、Spring IOC相关接口分析1、BeanFactory解析2、BeanDefinition解析3、BeanDefinitionReader解析4、BeanDefinitionRegistry解析5、创建容器…

无锡网知名网站免费建学校网站

关于Portforge Portforge是一款功能强大的轻量级端口混淆工具&#xff0c;该工具使用Crystal语言开发&#xff0c;可以帮助广大研究人员防止网络映射&#xff0c;这样一来&#xff0c;他人就无法查看到你设备正在运行&#xff08;或没有运行&#xff09;的服务和程序了。简而言…

网站标题如何写丰都网站建设报价

简介&#xff1a; 基础知识 XML文件格式 XML基本语法 XML属性 练习&#xff1a; C#读取存储XML XML文件存放位置 读取XML文件 练习&#xff1a; 存储修改XML文件 练习&#xff1a; 总结 实践小项目 必备知识点 必备知识点——C#中XML序列化 必备知识点——C#中XML反序列化 必备…

网站如何添加百度统计休闲农庄展示网站

经过几个月的努力,终于基本完成了人人API拥有的所有功能,界面采用仿照人人梦想版5.13制作,其中资源文件也采用人人的APK文件资源,完成的功能及知识点如下:1.通过三种动画仿照出人人引导页的放大切换图片的效果。2.通过重写ViewGroup仿照出人人菜单和其他界面的手势滑动切换效果…

个人网站免费源码邯郸网站建设报价

数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制&#xff1a; 1 < 数组长度 < 50000 思路&#xff1a;…

唐山哪个公司可以建网站网站开发工具怎么改内容

在 gitcode 上配置SSH公钥后&#xff0c;可以通过SSH协议安全地访问远程仓库&#xff0c;无需每次都输入用户名和密码。以下是配置SSH公钥的步骤&#xff1a; 5分钟解决方案 用 OpenSSH公钥生成器 生成 公钥和私钥&#xff0c;私钥文件&#xff08;id_rsa&#xff09;下载&am…

济南英文网站建设管理平台登录界面

文章目录 mybatis-config.xml-配置文件详解说明文档地址:配置文件属性解析properties 属性应用实例 settings 全局参数定义应用实例 typeAliases 别名处理器举例说明 typeHandlers 类型处理器environments 环境environment 属性应用实例 mappers配置 mybatis-config.xml-配置文…

深圳网站设计公司设计深圳网站设计南京

目录 前言 正文 1.Signal Group概念介绍 1.1 Initialization 1.2 Transmission 1.3 Reception 1.4 Notifications

河南建设工程信息网官网首页搜索引擎优化seo信息

前言&#xff1a;因为平时挺少用到多线程的&#xff0c;写游戏时都在用协程&#xff0c;至于协程那是另一个话题了&#xff0c;除了第一次学习多线程时和以前某个小项目有过就挺少有接触了&#xff0c;最近准备面试又怕被问的深入&#xff0c;所以就赶紧补补多线程基础。网上已…