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

tv网站建设有赞微商城官网登录

tv网站建设,有赞微商城官网登录,快速网页制作软件,徐州建设工程交易一、简介 AQS#xff0c;全称#xff1a;AbstractQueuedSynchronizer#xff0c;是一个JDK提供的用于构建锁、同步器等线程协作工具类的框架#xff0c;内部维护FIFO双向队列#xff08;双向链表实现#xff09;。 AQS重要属性#xff1a; // 表示同步状态。它既可以表…一、简介 AQS全称AbstractQueuedSynchronizer是一个JDK提供的用于构建锁、同步器等线程协作工具类的框架内部维护FIFO双向队列双向链表实现。 AQS重要属性 // 表示同步状态。它既可以表示独占模式下的锁状态也可以表示共享模式下的资源数量。通过修改state字段可以实现多线程的独占或共享模式‌ private volatile int state // 当前持有独占锁的线程 private transient Thread exclusiveOwnerThread // 头节点 private transient volatile Node head; // 尾节点 private transient volatile Node tail;Node节点重要属性 // 加入队列的线程 volatile Thread thread; // 前驱节点 volatile Node prev; // 后继节点 volatile Node next; // CANCELLED: 表示线程已经取消了对同步状态的请求。 // SIGNAL: 表示线程需要被唤醒通常是因为其他线程释放了同步状态。 // CONDITION: 表示线程正在等待某个条件。 // PROPAGATE: 表示下一次共享状态的释放应该传播到其他线程。 // 0: 初始状态表示节点没有特定的状态。 volatile int waitStatus; Node nextWaiter;AQS 在 ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、ThreadPoolExcutor 的 Worker 中都有运用JDK 1.8AQS 是这些类的底层原理。 二、实现自定义线程协作工具类 2.1 实现独占锁 重写AQS以下方法 boolean tryAcquire(int arg) boolean tryRelease(int arg) boolean isHeldExclusively()调用AQS以下方法 public final void acquire(int arg) {if (!tryAcquire(arg) acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt(); }public final boolean release(int arg) {if (tryRelease(arg)) {Node h head;if (h ! null h.waitStatus ! 0)unparkSuccessor(h);return true;}return false; }2.2 实现共享锁 重写AQS以下方法 int tryAcquireShared(int arg) boolean tryReleaseShared(int arg)调用AQS以下方法 public final void acquireShared(int arg) {if (tryAcquireShared(arg) 0)doAcquireShared(arg); }public final boolean releaseShared(int arg) {if (tryReleaseShared(arg)) {doReleaseShared();return true;}return false; }public final void acquireSharedInterruptibly(int arg)throws InterruptedException {if (Thread.interrupted())throw new InterruptedException();if (tryAcquireShared(arg) 0)doAcquireSharedInterruptibly(arg); }2.3 示例 import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;public class Test {class MySync extends AbstractQueuedSynchronizer {Overrideprotected boolean tryAcquire(int arg) {if (compareAndSetState(0, 1)) {setExclusiveOwnerThread(Thread.currentThread());return true;}return false;}Overrideprotected boolean tryRelease(int arg) {setExclusiveOwnerThread(null);setState(0);return true;}Overrideprotected boolean isHeldExclusively() {return getState() 1;}public Condition newCondition() {return new ConditionObject();}}class MyLock implements Lock {private MySync sync new MySync();Overridepublic void lock() {sync.acquire(1);}Overridepublic void lockInterruptibly() throws InterruptedException {sync.acquireInterruptibly(1);}Overridepublic boolean tryLock() {return sync.tryAcquire(1);}Overridepublic boolean tryLock(long time, TimeUnit unit) throws InterruptedException {return sync.tryAcquireNanos(1, unit.toNanos(time));}Overridepublic void unlock() {sync.release(1);}Overridepublic Condition newCondition() {return sync.newCondition();}}public static void main(String[] args) throws Exception {Test test new Test();MyLock myLock test.new MyLock();Thread t1 new Thread(new Runnable() {Overridepublic void run() {try {myLock.lock();System.out.println(Thread.currentThread().getName() 执行开始);Thread.sleep(5000L);System.out.println(Thread.currentThread().getName() 执行结束);} catch (InterruptedException e) {e.printStackTrace();} finally {myLock.unlock();}}}, t1);Thread t2 new Thread(new Runnable() {Overridepublic void run() {try {myLock.lock();System.out.println(Thread.currentThread().getName() 执行开始);Thread.sleep(3000L);System.out.println(Thread.currentThread().getName() 执行结束);} catch (InterruptedException e) {e.printStackTrace();} finally {myLock.unlock();}}}, t2);Thread t3 new Thread(new Runnable() {Overridepublic void run() {try {myLock.lock();System.out.println(Thread.currentThread().getName() 执行开始);Thread.sleep(1000L);System.out.println(Thread.currentThread().getName() 执行结束);} catch (InterruptedException e) {e.printStackTrace();} finally {myLock.unlock();}}}, t3);t1.start();t2.start();t3.start();} }参考1
http://www.w-s-a.com/news/14318/

相关文章:

  • 医院网站建设论证报告河源网站seo
  • 网站demo怎么做淘宝客网站一般用什么做的
  • 网站开发之美 pdf关键词查询优化
  • 可以建站的网站做一个网站美工多少钱
  • 怎么做网站专题互联网营销师报考费用
  • 淘宝导购网站怎么做上海数据开放网站建设
  • 广东网站建设怎么选2021个人网站盈利模式
  • 珠海网站建设的公司排名网站前端开发培训
  • 手机网站制作 费怎么做分录网站域名hk
  • 济南做网站建网站公司怎样用代码制作网站
  • 网站开发文档有哪些建设规划
  • 专注网站建设11年百度搜索不到我的网站
  • 企业网站 建设 流程wordpress 分类目录自定义
  • 北京市建设管理公司网站长春网站推广排名
  • 西安建站软件获取网站全站代码
  • 个人做网站怎么备案网站建设收费标准渠道
  • 单位做网站注意什么问题如何修改单页网站
  • asp全静态企业网站wordpress文章封面
  • 电白区住房和城乡建设部门户网站免费公司网站模版
  • 做玩游戏任务得q币的网站如何制作自己的公司内部网站
  • 网站优化自己可以做吗非官方网站建设
  • 厦门邮件网站点击网站
  • 网络推广网站的方法亳州网站制作公司
  • 网站域名主机空间区别广告设计专业前景
  • 新手做啥网站好dedecms网站的源码如何安装
  • 哪些网站是用iframe免费网站域名查询
  • 自己开的网站 可以做代销吗百度查找相似图片
  • 网站建设设计作业网站备案渝
  • 中国重庆网站建设福州短视频seo获客
  • 遵义官网网站建设网站移动端开发公司