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

迁西网站定制怎么制作网址内容

迁西网站定制,怎么制作网址内容,住房和城乡建设部官网查证,网站主机有什么用AQS#xff0c;全名AbstractQueuedSynchronizer。 抽象队列同步器定义多线程访问共享资源的同步模板#xff0c;解决了实现自定义同步器时涉及的大量细节问题#xff0c;简化开发两种同步状态#xff1a;独占、共享核心组件#xff1a;State变量、CLH变体队列、获取 / 释…AQS全名AbstractQueuedSynchronizer。 抽象队列同步器定义多线程访问共享资源的同步模板解决了实现自定义同步器时涉及的大量细节问题简化开发两种同步状态独占、共享核心组件State变量、CLH变体队列、获取 / 释放资源 方法重写 一、State变量 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) {return STATE.compareAndSet(this, expect, update);} 用关键字volatile修饰state表示该共享资源的状态一更改就能被所有线程可见。 state为0时代表线程可以竞争锁不为0时代表当前对象锁已经被占有。 ReentrantLock的state用来表示是否有锁资源ReentrantReadWriteLock的state高16位代表读锁状态低16位代表写锁状态Semaphore的state用来表示可用信号的个数CountDownLatch的state用来表示计数器的值 二、CLH变体队列 AQS 维护一个等待的线程队列  FIFO先进先出队列保证公平性双向链表形式方便尾部节点插入 当一个线程竞争资源失败就会将等待资源的线程封装成一个Node节点通过CAS原子操作插入队列尾部最终不同的Node节点连接组成了一个CLH队列这些线程会被UNSAFE.park()操作挂起等待其他获取锁的线程释放锁才能够被唤醒。 waitStatus 三、获取 / 释放资源 方法重写 AQS在自定义同步组件的实现中并调用其模板方法而这些模板方法会调用使用者重写的方法。 不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源state的获取与释放方式即可至于具体线程等待队列的维护如获取资源失败入队/唤醒出队等AQS已经在顶层实现好了。自定义同步器实现时主要实现以下几种方法 isHeldExclusively()该线程是否正在独占资源。只有用到condition才需要去实现它。tryAcquire(int)独占方式。尝试获取资源成功则返回true失败则返回false。tryRelease(int)独占方式。尝试释放资源成功则返回true失败则返回false。tryAcquireShared(int)共享方式。尝试获取资源。负数表示失败0表示成功但没有剩余可用资源正数表示成功且有剩余资源。tryReleaseShared(int)共享方式。尝试释放资源如果释放后允许唤醒后续等待结点返回true否则返回false。 1.独占资源不响应线程中断 acquire(int arg)独占式获取资源模板 此方法是独占模式下线程获取共享资源的顶层入口。如果获取到资源线程直接返回否则进入等待队列直到获取到资源为止且整个过程忽略中断的影响。 函数流程如下 tryAcquire()尝试直接去获取资源如果成功则直接返回这里体现了非公平锁每个线程获取锁时会尝试直接抢占加塞一次而CLH队列中可能还有别的线程在等待addWaiter()将该线程加入等待队列的尾部并标记为独占模式acquireQueued()使线程阻塞在等待队列中获取资源一直获取到资源后才返回。如果在整个等待过程中被中断过则返回true否则返回false。如果线程在等待过程中被中断过它是不响应的。只是获取资源后才再进行自我中断selfInterrupt()将中断补上。 release(int arg)独占式释放资源模板 函数流程如下 tryRelease()尝试直接释放资源如果成功(state0)要返回true否则返回false。 unparkSuccessor(Node) 唤醒等待队列中下一个线程。 2.共享资源不响应线程中断 acquireShared(int arg)共享式获取资源模板 函数流程如下 tryAcquireShared()尝试获取资源成功则直接返回失败则通过doAcquireShared()进入等待队列park()直到被unpark()/interrupt()并成功获取到资源才返回。整个等待过程也是忽略中断的。 跟acquire()的流程大同小异只不过多了个自己拿到资源后还会去唤醒后继队友的操作这才是共享嘛。 按照正常的思维共享模式是可以多个线程同时执行的才对所以多个线程的情况下如果老大释放完资源但这部分资源满足不了老二但能满足老三那么老三就可以拿到资源。可事实是从源码设计中可以看出如果真的发生了这种情况老三是拿不到资源的因为等待队列是按顺序排列的老二的资源需求量大会把后面量小的老三以及老四、老五等都给卡住。从这一个角度来看虽然AQS严格保证了顺序但也降低了并发能力 releaseShared(int arg)共享式释放资源模板 函数流程如下 tryReleaseShared释放资源。doAcquireShared唤醒后继结点。 四、应用实例Mutex互斥锁 class Mutex implements Lock, java.io.Serializable {// 自定义同步器private static class Sync extends AbstractQueuedSynchronizer {// 判断是否锁定状态protected boolean isHeldExclusively() {return getState() 1;}// 尝试获取资源立即返回。成功则返回true否则false。public boolean tryAcquire(int acquires) {assert acquires 1; // 这里限定只能为1个量if (compareAndSetState(0, 1)) {//state为0才设置为1不可重入setExclusiveOwnerThread(Thread.currentThread());//设置为当前线程独占资源return true;}return false;}// 尝试释放资源立即返回。成功则为true否则false。protected boolean tryRelease(int releases) {assert releases 1; // 限定为1个量if (getState() 0)//既然来释放那肯定就是已占有状态了。只是为了保险多层判断throw new IllegalMonitorStateException();setExclusiveOwnerThread(null);setState(0);//释放资源放弃占有状态return true;}}// 真正同步类的实现都依赖继承于AQS的自定义同步器private final Sync sync new Sync();//lock--acquire。两者语义一样获取资源即便等待直到成功才返回。public void lock() {sync.acquire(1);}//tryLock--tryAcquire。两者语义一样尝试获取资源要求立即返回。成功则为true失败则为false。public boolean tryLock() {return sync.tryAcquire(1);}//unlock--release。两者语文一样释放资源。public void unlock() {sync.release(1);}//锁是否占有状态public boolean isLocked() {return sync.isHeldExclusively();} } 同步类在实现时一般都将自定义同步器sync定义为内部类供自己使用而同步类自己Mutex则实现某个接口对外服务。 下面这些类中都包含Sync内部类。 五、参考 Java并发之AQS详解 - waterystone - 博客园 (cnblogs.com) 谈谈Java多线程离不开的AQS_java aqs-CSDN博客 Java并发编程面试题 | 小林coding (xiaolincoding.com)
http://www.w-s-a.com/news/238231/

相关文章:

  • 深圳装饰公司网站宁波网站建设哪里有
  • 建站网站破解版怎么看自己的网站是用什么做的
  • 做微商那个网站好织梦模板更新网站
  • 网站注册表单怎么做手机做网站需要多少天
  • 书店商城网站html模板下载企业网站建设方案书范文
  • 建设网站是普通办公吗快速排名seo软件
  • 大型外贸网站建设网站建设图片尺寸要求
  • 网站建设可信赖北京网站开发月薪
  • 专门做lolh的网站wordpress 模版 cho's
  • 网上做设计兼职哪个网站好点网站开发毕业周记
  • 自学商城网站建设无为网页定制
  • wordpress全站cdn手机网站调用分享
  • 淄博做网站58同城wordpress微信号订阅
  • 不同的网站 做301公共资源交易中心是干嘛的
  • 36 氪 网站如何优化怎么优化自己的网站
  • 网站兼容问题湖北网站建设优化
  • 2018新网站做外链app制作的网站
  • 外贸网站建设怎么建设pc网站做移动端适配
  • 做经销找厂家好的网站个人备案网站可以做电影站吗
  • 网站搭建怎么做网站建设培训哪家好
  • 学做美食的视频网站企业网站备案密码怎么找回
  • 销售产品做单页还是网站seo有哪些作用
  • 网站视觉规范南宁网站优化推广
  • 公司起名打分最准的免费网站学设计的学校
  • 用cn作网站行么WordPress网站打不开nginx
  • 顺德龙江网站建设百货商城自助下单网站
  • 门户网站采用较多的模式是wordpress自动搜索缩略图
  • 深圳设计功能网站做网站推广怎么做
  • 海口专业网站建设地址wordpress站点标题是什么
  • 青岛做网站那家好网页素材网