当前位置: 首页 > wzjs >正文

icp备案需要先建设网站么网页美工是什么

icp备案需要先建设网站么,网页美工是什么,长春新建设,天津门户网站建设引言 上篇文章详细讲解了AQS底层架构,由等待队列和同步队列以及state信号量来实现,本篇文章将详细讲解JUC包是如何利用这些架构来实现各种组件的 ReentrantLock(可重入锁) ReentrantLock 是一个独占锁,同一时刻只允…

引言

上篇文章详细讲解了AQS底层架构,由等待队列和同步队列以及state信号量来实现,本篇文章将详细讲解JUC包是如何利用这些架构来实现各种组件的

ReentrantLock(可重入锁)

ReentrantLock 是一个独占锁,同一时刻只允许一个线程获取锁。它通过 AQS 的 state 变量来表示锁的重入次数,state 为 0 表示锁未被持有,大于 0 表示锁已被持有,且值表示持有线程的重入次数。

实现细节:

获取锁:ReentrantLock 有公平锁和非公平锁两种实现,它们都继承自 AQS 并重写了 tryAcquire 方法。以非公平锁为例,当线程尝试获取锁时,会先检查 state 是否为 0,如果是则尝试使用 CAS 操作将 state 设为 1,表示获取锁成功;如果 state 不为 0 且当前线程就是持有锁的线程,则将 state 加 1,表示重入。

static final class NonfairSync extends Sync {final void lock() {if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);}protected final boolean tryAcquire(int acquires) {return nonfairTryAcquire(acquires);}
}

释放锁:重写 tryRelease 方法,每次释放锁时将 state 减 1,当 state 减为 0 时,表示锁完全释放,此时会唤醒等待队列中的后继节点。

protected final boolean tryRelease(int releases) {int c = getState() - releases;if (Thread.currentThread() != getExclusiveOwnerThread())throw new IllegalMonitorStateException();boolean free = false;if (c == 0) {free = true;setExclusiveOwnerThread(null);}setState(c);return free;
}

CountDownLatch(倒计时锁存器)

CountDownLatch 用于让一个或多个线程等待其他线程完成操作。它通过 AQS 的 state 变量作为计数器,初始值为需要等待的操作数量,每当一个操作完成时,调用 countDown() 方法将 state 减 1,当 state 减为 0 时,等待的线程会被唤醒。

实现细节:

初始化:在构造函数中设置 state 的初始值。

public CountDownLatch(int count) {if (count < 0) throw new IllegalArgumentException("count < 0");this.sync = new Sync(count);
}private static final class Sync extends AbstractQueuedSynchronizer {Sync(int count) {setState(count);}
}

等待操作完成:调用 await() 方法,线程会尝试获取共享锁,只有当 state 为 0 时才能获取成功,否则线程会进入等待队列。

public void await() throws InterruptedException {sync.acquireSharedInterruptibly(1);
}

操作完成通知:调用 countDown() 方法,会将 state 减 1,当 state 减为 0 时,会唤醒等待队列中的所有线程。

public void countDown() {sync.releaseShared(1);
}

Semaphore(信号量)

Semaphore 用于控制同时访问某个资源的线程数量。它通过 AQS 的 state 变量表示可用的许可数量,线程在访问资源前需要先获取许可(acquire()),访问完成后释放许可(release())。

实现细节:

获取许可:调用 acquire() 方法,线程会尝试获取共享锁,通过减少 state 的值来表示获取许可。如果 state 小于请求的许可数量,则线程会进入等待队列。

public void acquire() throws InterruptedException {sync.acquireSharedInterruptibly(1);
}

释放许可:调用 release() 方法,会增加 state 的值,表示释放许可,同时会唤醒等待队列中的线程。

public void release() {sync.releaseShared(1);
}


文章转载自:

http://KSA0e0RY.jtxwq.cn
http://6qMQnXy5.jtxwq.cn
http://Yle7bhCP.jtxwq.cn
http://Au9ttD9J.jtxwq.cn
http://i6DXoQ0j.jtxwq.cn
http://AQxHhrZ2.jtxwq.cn
http://Rsp2xqoM.jtxwq.cn
http://VLvO0wM0.jtxwq.cn
http://uIHFUccY.jtxwq.cn
http://2hbG9Yux.jtxwq.cn
http://PBFCmBS9.jtxwq.cn
http://vZeodK4i.jtxwq.cn
http://mmKYRSUp.jtxwq.cn
http://XI4OmeG8.jtxwq.cn
http://DGc80BAs.jtxwq.cn
http://oKDnQLnR.jtxwq.cn
http://TGlS6m5k.jtxwq.cn
http://tOoinZBt.jtxwq.cn
http://V37yIsRk.jtxwq.cn
http://6s1DQVMs.jtxwq.cn
http://rfQuehUv.jtxwq.cn
http://UYSuy9De.jtxwq.cn
http://pc6cnLZO.jtxwq.cn
http://fGa0rvKd.jtxwq.cn
http://Oc3GrBaJ.jtxwq.cn
http://SxmbvH6E.jtxwq.cn
http://yJ8uIQGa.jtxwq.cn
http://Kv1d81oJ.jtxwq.cn
http://KKEeNI0Z.jtxwq.cn
http://B76yII1g.jtxwq.cn
http://www.dtcms.com/wzjs/618246.html

相关文章:

  • 企业介绍微网站怎么做的网站界面设计的发展趋势
  • 爱用建站官网营销网站建设公司推荐
  • 可信网站认证 费用提高网站订单转化率
  • 兰州网站建设推荐q479185700顶上wix和wordpress区别
  • 怎么邀约客户做网站北京专业网络直播制作
  • 网站用途说明肇庆市电商网站建设价格
  • 营销型网站设计房地产wordpress购物车保存
  • 制作企业网站的代码分析网站示例
  • 如何让单位网站做防护网站 被刷流量
  • 网站建设好卖吗88建网站
  • 漫画 网站 源码合肥小程序开发公司哪家好
  • 台州网络建站模板asp网站合法
  • wordpress怎么设置网站描述高端网页设计培训
  • 营销型网站策划建设深圳市住房保障署官网
  • 网站建设与管理初级教学贵阳做网站需要多少钱
  • 杭州最好的网站设计公司小游戏网页版入口
  • 大连网站建设方案咨询佛山网站设计师
  • 沈阳网站建设与开发网站域名被注销重新备案怎么做
  • 做网站和优化共多少钱室内设计联盟 官网
  • 机关 网站 建设方案营销网络搭建
  • 临沂网站建设团队网站开发需要什么服务器
  • 2017网站开发工资怎么制作动画
  • 企业网站建设的主要目的是做网站页面怎么做
  • 三合一网站建设高安高端网站设计公司
  • 做网站前端难吗公司简介怎么写 范文
  • 寺庙网站开发建设方案餐饮网站建设规划书
  • 广州外贸网站推广网站建设的公司业务
  • 网站空间选择wordpress 评审系统
  • 广州建站模板搭建广州:推动优化防控措施落地
  • 呼和浩特商城网站建设手机网站支持微信支付