自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(3)
  • 收藏
  • 关注

原创 CountDownLatch原理

接着在循环中判断前驱节点是否为头节点,是的话判断state是否为0,是的话将自己设置为头节点,并调用doReleaseShared方法将下一个节点唤醒。否则的话通过LockSupport的park方法阻塞住线程。countDown调的是同步器的releaseShared方法,里面通过cas轮询将state减1,state为0时调用doReleaseShared方法将头节点的下一个节点唤醒。

2024-01-16 14:55:29 328 1

原创 SynchronousQueue原理

若队列为空(仅有傀儡节点)或者当前的请求与队列中节点的模式相同(一样是取或者一样是放),那就构造等待节点,等待节点中存放了元素,当前线程。非公平是TransferStack,等待链表是栈。若当前的请求与队列中节点的模式不同,那便将第一个实际节点(傀儡头节点的next)的元素cas替换成当前请求的元素,再将头节点指针cas指向该节点。SynchronousQueue添加元素跟获取元素都是调用Transfer的transfer方法,传递的元素e为null时代表着获取,传递的元素e非空时代表着添加。

2023-05-01 21:01:13 73

原创 FutureTask的get方法原理

FutrueTask的get会先判断state的值是否大于comleting,也就是执行完,是的话就判断state为normal正常的话,就返回outcome结果,为cancel取消的话,就抛取消异常,为异常的话,就抛出outcome记录的异常。执行任务的线程那边在执行完任务后,就把结果或者异常保存到outcome里,修改state的值,并且依次将队列里的结点出队并调用LockSupport的unpark方法唤醒节点里的线程。否则如果还未构造等待结点,那就构造等待结点,结点里保存了当前线程。

2023-04-30 16:11:26 559 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除