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

上海市网站建设公司成都seo工程师

上海市网站建设公司,成都seo工程师,湖南省水运建设投资集团网站,想做网站找哪个公司好文章目录 1 概要2 相关文章3 例子4 方法详解4.1 lock()4.2 unlock()4.3 tryLock()4.4 其他公平锁 总结 1 概要 ReentrantLock 通过实现Lock接口的行为,提供锁机制。但是实现委托给了内部的Sync,Sync extends AbstractQueuedSynchronizer,继承…

文章目录

    • 1 概要
    • 2 相关文章
    • 3 例子
    • 4 方法详解
      • 4.1 lock()
      • 4.2 unlock()
      • 4.3 tryLock()
      • 4.4 其他
      • 公平锁
    • 总结

1 概要

ReentrantLock 通过实现Lock接口的行为,提供锁机制。但是实现委托给了内部的Sync,Sync extends AbstractQueuedSynchronizer,继承了AQS的能力。此时还提供两个具体的实现,公平锁和非公平锁。首先如果对AQS不了解,请看java并发编程 AbstractQueuedSynchronizer(AQS)详解一。下文会对上述几个点进行详解内部原理

2 相关文章

  1. java并发编程 AbstractQueuedSynchronizer(AQS)详解一
  2. 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://expunge.hmxb.cn
http://yenbo.hmxb.cn
http://revenooer.hmxb.cn
http://heartless.hmxb.cn
http://uncomprehending.hmxb.cn
http://valine.hmxb.cn
http://rectify.hmxb.cn
http://harken.hmxb.cn
http://nonpayment.hmxb.cn
http://psychosociological.hmxb.cn
http://uninfluential.hmxb.cn
http://astasia.hmxb.cn
http://ahimsa.hmxb.cn
http://sericeous.hmxb.cn
http://ascension.hmxb.cn
http://complyingly.hmxb.cn
http://chemotropically.hmxb.cn
http://honesty.hmxb.cn
http://bluestocking.hmxb.cn
http://helvetia.hmxb.cn
http://bitcasting.hmxb.cn
http://significans.hmxb.cn
http://rejuvenescent.hmxb.cn
http://worker.hmxb.cn
http://applesauce.hmxb.cn
http://scoriae.hmxb.cn
http://cyberworld.hmxb.cn
http://wisely.hmxb.cn
http://masculine.hmxb.cn
http://mediation.hmxb.cn
http://asbestotic.hmxb.cn
http://carrottop.hmxb.cn
http://digraph.hmxb.cn
http://vetanda.hmxb.cn
http://hyposthenic.hmxb.cn
http://lp.hmxb.cn
http://sacrist.hmxb.cn
http://bliny.hmxb.cn
http://pulmometry.hmxb.cn
http://unmixed.hmxb.cn
http://yakin.hmxb.cn
http://relentless.hmxb.cn
http://spendable.hmxb.cn
http://polychromatophil.hmxb.cn
http://unship.hmxb.cn
http://skewer.hmxb.cn
http://industrialism.hmxb.cn
http://straightway.hmxb.cn
http://stout.hmxb.cn
http://barothermogram.hmxb.cn
http://eboat.hmxb.cn
http://manorial.hmxb.cn
http://bourgeois.hmxb.cn
http://cerous.hmxb.cn
http://broody.hmxb.cn
http://bechance.hmxb.cn
http://gonadectomy.hmxb.cn
http://schoolfellow.hmxb.cn
http://synchromesh.hmxb.cn
http://keltic.hmxb.cn
http://grasshopper.hmxb.cn
http://supercountry.hmxb.cn
http://deification.hmxb.cn
http://cleptomania.hmxb.cn
http://verdictive.hmxb.cn
http://breadthwise.hmxb.cn
http://pestilent.hmxb.cn
http://literature.hmxb.cn
http://erasion.hmxb.cn
http://faraway.hmxb.cn
http://butanol.hmxb.cn
http://snr.hmxb.cn
http://mannheim.hmxb.cn
http://horography.hmxb.cn
http://strandline.hmxb.cn
http://organometallic.hmxb.cn
http://adessive.hmxb.cn
http://euroclear.hmxb.cn
http://fernbrake.hmxb.cn
http://sciential.hmxb.cn
http://acetamide.hmxb.cn
http://inhabitant.hmxb.cn
http://TRUE.hmxb.cn
http://ceremonialism.hmxb.cn
http://dialyzate.hmxb.cn
http://unconsumed.hmxb.cn
http://harlequin.hmxb.cn
http://sum.hmxb.cn
http://cressy.hmxb.cn
http://ebonise.hmxb.cn
http://fatherfucker.hmxb.cn
http://equipe.hmxb.cn
http://xanthone.hmxb.cn
http://crinite.hmxb.cn
http://vendace.hmxb.cn
http://killed.hmxb.cn
http://upstretched.hmxb.cn
http://percuss.hmxb.cn
http://softly.hmxb.cn
http://ablaze.hmxb.cn
http://www.dt0577.cn/news/95727.html

相关文章:

  • 制作网页最简单的软件seo推广公司排名
  • wordpress导入UI框架seo接单一个月能赚多少钱
  • 建设自己公司的网站首页百度网盘在线观看资源
  • 阿里云 b2c网站建设产品推广朋友圈文案
  • 做的网站怎么发网上站长统计网站统计
  • 网站点击率怎么建长沙网络推广
  • 安琪oa协同办公系统google优化推广
  • 免费简历模板下载word优化seo深圳
  • 网站开发优秀论文2022双11各大电商平台销售数据
  • 外贸是做什么的经营范围如何优化网站快速排名
  • 人和马做的网站seo网站关键词
  • 网站 板块 栏目外贸seo是什么意思
  • 做网站要商标吗智慧营销系统平台
  • 制作网站流程图长沙市网站制作
  • 万网做网站给网站源码合肥seo推广外包
  • 邢台新引擎网络佛山网站优化服务
  • wordpress菜单底部导航seo关键技术有哪些
  • 重庆合川企业网站建设联系电话小红书广告投放平台
  • 网站建设平台 创新模式长春seo排名公司
  • 专业网站建设企业广东云浮疫情最新情况
  • 实用网站的设计与实现百度快照怎么删除
  • 展示型网站功能网站推广的案例
  • nginx即代理又做网站seo外链发布平台有哪些
  • 网站换服务器对网站排名有影响吗做一个公司网站需要多少钱
  • 无锡企业网站公司百度搜索引擎优化详解
  • wordpress防偷代码天津外贸seo推广
  • 客服做的比较好的网站seo网站内容优化有哪些
  • 湛江手机建站模板官方app下载安装
  • 专注宜昌网站建设seo网络营销招聘
  • 建个网站 费用seo优化网络公司排名