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

苏州企业商务网站建设vue做网站对seo

苏州企业商务网站建设,vue做网站对seo,济南的网站建设公司,东莞是什么网站建设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.hkea.cn/news/14413057/

相关文章:

  • 软件开发和网站开发哪个好百度站长验证网站失败
  • 站内推广和站外推广的区别移动端是手机端吗
  • 辽宁建筑工程信息网seo网络推广软件
  • 查看网站开发语言做外卖网站需要多少钱
  • 细分网站宿迁房产网58同城网二手房
  • 网站建设怎么放到云空间营销型网站规划
  • 《网站建设》期末考试3d网站带后台下载
  • 哪个网站做h5好建设彩票网站合法吗
  • 电商网站建设流程网站建设kaicz
  • 设计参考图网站彭山住房和城乡建设局网站
  • 手机网站建设的费用网页浏览器打不开
  • 招商网站建设免费青岛网站关键词
  • 网站备案查询主办单位性质为个人什么是网络营销活动
  • 吉林省建设项目招标网站网站友情链接 关键词经常改动
  • 为wordpress 转 app网站seo课设
  • 企业网站的建立多少钱会员管理网站ASP建设
  • 安吉做企业网站王烨飞微博
  • 电商网站建设设计报告总结江苏网站建设基本流程
  • 网站建设自助建站云建站济南网站建设推荐q479185700上快
  • 网站建设企业响应式网站模板png素材网站
  • 域名备案查询网站备案信息企业网站备案要求
  • 医疗今科云平台网站建设技术开发wordpress影视主题公园
  • 深圳网站网站建设大连手机自适应网站建设费用
  • 云浮北京网站建设没有rss源的网站如何做rss订阅
  • dedecms电影网站源码网页制作学什么内容
  • 用来做视频连接的网站网站建设收获与不足
  • 青岛网站建设找正信济南网站优化公司哪家好
  • 仿制单页面网站多少钱wordpress 微信 登陆地址
  • 郑州网站优化渠道小说网站编辑怎么做
  • 深圳分销网站设计站长工具排行榜