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

网站开发流程图解释含义创建网站的详细步骤

网站开发流程图解释含义,创建网站的详细步骤,天涯论坛网站建设,网站建设开发五行属性ReentrantLock源码解读 在讲ReentrantLock之前我们先看一下Lock接口里的方法 Lock接口中的方法 lock()方法 void lock(); //直接加锁,如果加锁失败什么也不返回lockInterruptibly()方法 void lockInterruptibly() throws InterruptedException;lockInterruptibly()方法能够…

ReentrantLock源码解读

在讲ReentrantLock之前我们先看一下Lock接口里的方法

Lock接口中的方法

lock()方法
void lock(); //直接加锁,如果加锁失败什么也不返回
lockInterruptibly()方法
void lockInterruptibly() throws InterruptedException;

lockInterruptibly()方法能够中断等待获取锁的线程。当两个线程同时通过lock.lockInterruptibly()获取某个锁时,假若此时线程A获取到了锁,而线程B只有等待,那么对线程B调用threadB.interrupt()方法能够中断线程B的等待过程。

tryLock()
boolean tryLock(); //直接加锁,如果加锁失败返回false
tryLock(long time, TimeUnit unit)
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;  // 尝试获取锁,如果没获取到锁,就等待一段时间,这段时间内还没获取到锁就返回false
unlock()方法
void unlock();//释放锁
newCondition()
Condition newCondition();// 条件锁

以上就是Lock接口中的方法,接下来我们看一下ReentrantLock的实现代码。

ReentrantLock的内部类

首先是ReentrantLock的三个内部类:Sync、NonfairSync、FairSync,其中NonfairSync类和FairSync类是继承Sync类

Sync类

首先Sync是一个静态的抽象类,下面我们看一下它的内部方法。

lock()
abstract void lock(); //抽象方法由子类实现
nonfairTryAcquire()
final boolean nonfairTryAcquire(int acquires) {final Thread current = Thread.currentThread();int c = getState();if (c == 0) {//判断当前是否有线程持有锁if (compareAndSetState(0, acquires)) {//使用CAS尝试加锁setExclusiveOwnerThread(current);return true;}}else if (current == getExclusiveOwnerThread()) {//判断当前持有锁的线程是否是自己int nextc = c + acquires;if (nextc < 0) // overflowthrow new Error("Maximum lock count exceeded");setState(nextc); //锁重入了,修改state的值return true;}return false;
}
tryRelease()

释放锁的方法

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;
}
isHeldExclusively()

判断锁是否是当前线程持有

protected final boolean isHeldExclusively() {// While we must in general read state before owner,// we don't need to do so to check if current thread is ownerreturn getExclusiveOwnerThread() == Thread.currentThread();
}
newCondition()

// 条件锁

final ConditionObject newCondition() {return new ConditionObject();
}
getOwner()

返回当前持有锁的线程,如果没有则返回null

final Thread getOwner() {return getState() == 0 ? null : getExclusiveOwnerThread();
}
getHoldCount()

当前线程持有此锁的次数,如果当前线程不持有此锁,则为零

final int getHoldCount() {return isHeldExclusively() ? getState() : 0;
}
NonfairSync类

NonfairSync是非公平锁的实现类,继承了Sync类。

lock()

加锁方法,因为是非公平锁所以在加锁的时候会先去尝试加锁,如果加锁失败则调用acquire()方法放入队列排队

final void lock() {if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);
}
tryAcquire()

这里是调用父类的方法nonfairTryAcquire

protected final boolean tryAcquire(int acquires) {return nonfairTryAcquire(acquires);
}
FairSync类

FairSync公平锁的实现类

lock()

加锁方法

final void lock() {acquire(1);//调用父类的方法加锁
}
tryAcquire()
protected final boolean tryAcquire(int acquires) {final Thread current = Thread.currentThread();//获取当前线程int c = getState(); //获取锁标志位的值if (c == 0) {//判断锁是否被其他线程占用if (!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;}
}

以上就是ReentrantLock的内部类了,接下来看一下构造方法

ReentrantLock的构造方法
无参构造方法

无参构造方法默认使用非公平锁

public ReentrantLock() {sync = new NonfairSync();
}
有参构造

传入参数为true时,是公平锁,false是非公平锁

public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();
}
ReentrantLock的其他方法

其他方法的调用主要主要看ReentrantLock使用的是公平锁还是非公平锁,这里就不一一介绍了;关于ReentrantLock的锁的实现还涉及到了AbstractQueuedSynchronizer、AbstractOwnableSynchronizer这两个类,这些我们后面再继续分析。

http://www.yayakq.cn/news/679590/

相关文章:

  • 2小时wordpress建站目前网络推广平台
  • 网站建设搜索优wordpress网站防采集
  • 汽车工厂网站建设wordpress固定链接
  • 网站建设需要摊销吗深圳市app制作公司
  • 青岛网站建设王道下拉強wordpress双语版
  • 淄博专业网站建设如何知道网站后台地址
  • 宿豫区城乡建设局网站wordpress标题前缀
  • 广西建设职业技术学院管理工程系网站2014考试前培训时间网络营销策划方案
  • 渭南定制网站建设公司上海seo课程
  • 怎么自己做导购网站软件开发培训学校软件开发课程内容
  • 惠州惠城网站建设昌江县住房和城乡建设网站
  • 外汇自动跟单网站开发室内设计展厅设计
  • 品牌网站建设大概费用网站建设站建设好吗
  • 宁波余姚网站建设房地产最新消息14号公告
  • 深圳网站建设 设计首选python能够做网站
  • 免费门户网站建设微网站建设市场分析
  • 医院双语网站建设的意义先做网站再付款 怎么回答
  • 网页设计与网站建设 作业建筑企业网站源码
  • fview网站开发在线查询营业执照
  • 浅析个人网站的设计论文三亚婚纱摄影 织梦网站源码
  • 服装厂家东莞网站建设中国建设银行官网入口
  • 衡水企业网站建设wordpress导航栏修改
  • 国内永久免费crm系统网站推荐wordpress主页图片不显示图片
  • 做网站动态背景的图片4399小游戏在线玩网页版
  • 金牛区建设局网站seo包括哪些方面
  • 哪个网站做生鲜配送wordpress登录地址插件
  • 网站百度排名科技部部长用梅西解释chatgpt
  • 西安网站seo推广网络推广营销服务
  • 揭阳市网站建设软件开发有哪些岗位
  • 微网站模板建设如何做一个电商