- 博客(6)
- 资源 (16)
- 收藏
- 关注
原创 【Java并发编程实战】—– AQS(四):CLH同步队列
在【Java并发编程实战】—–“J.U.C”:CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。其结构如下:知道其结构了,我们再看看他的实现。
2015-12-30 08:31:32 11274
原创 【Java并发编程实战】—– AQS(三):阻塞、唤醒:LockSupport
在上篇博客(【Java并发编程实战】—– AQS(二):获取锁、释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起;在释放锁后,需要唤醒该线程的继任节点lock方法,在调用acquireQueued():if (shouldParkAfterFailedAcquire(p, node) && parkAndCheckI
2015-12-27 11:28:58 12061 3
原创 【Java并发编程实战】-----“J.U.C”:AQS分析(二):获取锁、释放锁
上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放。AQS锁获取AQS包含如下几个方法:acquire(int arg):以独占模式获取对象,忽略中断。acquireInterruptibly(int arg): 以独占模式获取对象,如果被中断则中止。acquireShared(int arg): 以共享模式获取对象,忽略中断。acquireSharedInterruptibly
2015-12-24 17:53:20 6122
原创 【Java并发编程实战】-----“J.U.C”:AQS分析(一)
在前面博客中,LZ讲到了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁,他们具有明显的优势:花最小的空间开销创建锁、最少的时间开销获得锁、使用更加方便灵活。参考Java的内置锁,对于JUC同步器而言,他应该具备两个最基本的功能:获取锁,释放锁。其中获取锁应该是先判断当前
2015-12-17 17:50:01 6481
原创 【Java并发编程实战】-----“J.U.C”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图:在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过myPred
2015-12-10 09:47:55 8242 2
原创 【Java并发编程实战】—–“J.U.C”:CAS操作
CAS,即Compare and Swap,中文翻译为“比较并交换”。对于JUC包中,CAS理论是实现整个java并发包的基石。从整体来看,concurrent包的实现示意图如下:i++是一个非常经典的操作,它几乎充斥着我们每个人编写的代码中。我们知道i++是可以分解的,它分解为getI()、i + 1 、setI三个步骤,所以它并不是原子操作。如果i==1,执行两次i++操作,我们期望的结果是3
2015-12-07 09:27:42 4788
老干爹/Cloud-Admin
2018-08-26
Spring源码
2018-05-23
Edraw Max for mac 亿图图示 8.4 中文破解版
2018-04-23
基于J2EE购物网站的设计与实现--源码
2013-06-16
jspSmartUpload组件,文件上传、下载
2011-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人