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

网站开发分类预约网站制作

网站开发分类,预约网站制作,网页设计叫什么岗位,wordpress 运行效率文章目录 1 概要2 相关文章3 例子4 方法详解4.1 lock()4.2 unlock()4.3 tryLock()4.4 其他公平锁 总结 1 概要 ReentrantLock 通过实现Lock接口的行为#xff0c;提供锁机制。但是实现委托给了内部的Sync#xff0c;Sync extends AbstractQueuedSynchronizer#xff0c;继承… 文章目录 1 概要2 相关文章3 例子4 方法详解4.1 lock()4.2 unlock()4.3 tryLock()4.4 其他公平锁 总结 1 概要 ReentrantLock 通过实现Lock接口的行为提供锁机制。但是实现委托给了内部的SyncSync extends AbstractQueuedSynchronizer继承了AQS的能力。此时还提供两个具体的实现公平锁和非公平锁。首先如果对AQS不了解请看java并发编程 AbstractQueuedSynchronizer(AQS)详解一。下文会对上述几个点进行详解内部原理 2 相关文章 java并发编程 AbstractQueuedSynchronizer(AQS)详解一java并发编程 AbstractQueuedSynchronizer(AQS)详解二 3 例子 ReentrantLock 注释上的例子。。。。 如果lock没有被阻塞住就代表获取到锁然后执行业务逻辑。最终finally 里释放锁防止抛异常 public class X {private final ReentrantLock lock new ReentrantLock(); // ... public void m() { lock.lock();// block until condition holds try { // ... method body } finally { lock.unlock() ; } } }4 方法详解 先看非公平锁实现。 先说下在ReentrantLock里上锁是通过state变量如果是0且从0原子变成1成功代表获取成功如果重入则state 1,释放锁就减1,0的时候释放锁。 4.1 lock() public void lock() {//委托给sync执行sync.lock(); } //非公平锁实现 final void lock() {//先自己尝试设置成1 如果成功设置拥有锁的线程为自己if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());else//aqs 的acquire 若对aqs不熟悉的请先看相关文章//他会进入tryAcquire(arg)的具体实现acquire(1); } protected final boolean tryAcquire(int acquires) {return nonfairTryAcquire(acquires); } //非公平的尝试加锁 final boolean nonfairTryAcquire(int acquires) {final Thread current Thread.currentThread();int c getState();if (c 0) {//如果是0 尝试变成1此时如果阻塞队列中有阻塞的线程但是新的加锁线程还是有可能获取到锁的//因为释放锁后只会从Head.next的Node去唤醒获取锁, 你后来的线程比先来的先拿到锁公平吗 非公平锁if (compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}}//可重入的实现。如果当前线程是自己也就是lock拿到锁再lock直接state 1, 因为独占锁所以不需要原子性1else if (current getExclusiveOwnerThread()) {int nextc c acquires;if (nextc 0) // overflowthrow new Error(Maximum lock count exceeded);setState(nextc);return true;}//现在state不是0且持有锁的线程不是自己尝试加锁失败return false; }4.2 unlock() 持有锁的线程释放锁 public void unlock() {sync.release(1); }public final boolean release(int arg) {// aqs的抽象实现if (tryRelease(arg)) {//成功了会唤醒head.next线程Node h head;if (h ! null h.waitStatus ! 0)unparkSuccessor(h);return true;}//释放失败 可重入的时候从5 - 4return false; } protected final boolean tryRelease(int releases) {//不需要原子性操作是因为当前持有锁int c getState() - releases;if (Thread.currentThread() ! getExclusiveOwnerThread())throw new IllegalMonitorStateException();boolean free false;//state 0 的时候代表释放锁if (c 0) {free true;setExclusiveOwnerThread(null);}setState(c);return free; }4.3 tryLock() 对比lock 其实就没有进入阻塞队列的逻辑。比较简单 public boolean tryLock() {return sync.nonfairTryAcquire(1); }4.4 其他 其他方法都可类比lock 和 unlock。如阻塞一段时间的等。 公平锁 公平锁核心方法实现对比下和非公平锁的区别就可以看到多了!hasQueuedPredecessors() 这个方法。很清晰。 protected final boolean tryAcquire(int acquires) {final Thread current Thread.currentThread();int c getState();if (c 0) {//区别在这如果阻塞队列有阻塞的线程就不去争抢会return falseif (!hasQueuedPredecessors() compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}}else if (current getExclusiveOwnerThread()) {int nextc c acquires;if (nextc 0)throw new Error(Maximum lock count exceeded);setState(nextc);return true;}return false; } //阻塞队列中没有阻塞的线程 public final boolean hasQueuedPredecessors() {Node t tail;Node h head;Node s;return h ! t ((s h.next) null || s.thread ! Thread.currentThread()); }总结 ReentrantLock 本质上是基于AQS实现的可重入锁且提供了公平和非公平的机制逻辑较为简单需要对AQS熟练掌握。
http://www.dnsts.com.cn/news/190945.html

相关文章:

  • 河南做网站公司排名wordpress page templates
  • 主机做网站服务器吗做网站有哪些主题
  • 长春火车站出站要求dw做的网站有域名么
  • 网站建设哪家微信公众号页面设计模板
  • 甘肃网站建设哪家好深圳市seo网络推广平台
  • 怎样自学网站开发制作小网站
  • 简述营销网站建设策略山东服务好的seo
  • asp网站建设运用的技术做网站总结
  • windows2008 iis 网站自动seo系统
  • 北京建设集团网站首页全中文网站开发
  • 洛阳建站哪家好怎么创建免费网页
  • 商旅网站制作潮汕17网站一起做网店官网
  • 网站设计计划书的要求做网站被骗怎么办
  • 中小学生做试卷的网站温州做网站建设
  • app下载网站模板济南网站优化收费标准
  • 海外公司网站 国内做备案公司想做一个网站首页怎么做
  • 北京 网站定制开发爱站网怎么打不开
  • 网站怎么架设住房建设厅网站
  • 大型网站开发wordpress付费主题国内优秀
  • 竞价移动网站网站建设与维护蒋勇从
  • 青岛开发区网站大数据营销系统怎么样
  • wordpress 转移数据库seo中国官网
  • 电子商务网站制作公司做英德红茶的网站
  • 做网站多少钱 佛山爱站网为什么不能用了
  • asp.net做报名网站桂林
  • 群晖 建站 Wordpress免费的h5制作软件app
  • 东莞网站推广运营深圳产品外观设计公司
  • 做网站多少钱 优帮云wordpress 详细介绍
  • phpstudy配置网站四大门户网站对比分析
  • 创建好网站如何把浏览器沈阳沈河seo网站排名优化