Java并发
文章平均质量分 70
YANYONG_
这个作者很懒,什么都没留下…
展开
-
Java AQS模型
Java AQS (AbstractQueuedSynchronizer)是Java并发包中的一个抽象类,它使用一个volatile变量state来表示同步的状态(锁是否占用),每次只能一个线程占用这个状态资源进行操作,同时通过一个同步等待队列来管理没有获取到同步状态的线程。原创 2023-05-10 19:49:00 · 86 阅读 · 1 评论 -
AbstractQueuedSynchronizer源码分析
AQS提供了一套加锁、释放锁的流程模版,首先调用tryAcquire尝试获取锁,如果获取锁失败,那么线程会被封装成Node节点,添加到AQS等待队列等待它的前置线程唤醒。当线程执行完任务后,会调用tryRelease释放锁,最后通过next找到后置节点唤醒它原创 2023-05-11 21:14:19 · 92 阅读 · 1 评论 -
ReentrantLock例子
ReentrantLock 公平锁的简单使用例子。原创 2023-05-11 21:59:25 · 87 阅读 · 0 评论 -
ReentrantLock 源码分析
ReentrantLock是一个可重入独占锁。可重入的意思是同一个线程可以对同一个共享资源进行重复的加锁和释放锁;独占锁就是任何时刻只允许一个线程占有锁。ReentrantLock有公平和非公平两种策略,均以内部类的方式来实现原创 2023-05-11 23:36:07 · 60 阅读 · 0 评论 -
Java Condition源码分析
Condition是一个配合独占锁ReentrantLock实现类似Object 的wait和notify功能的等待队列。Object的wait、notify方法需要在synchronized代码块中执行,同样Condition的await、signal需在lock获取独占锁成功之后调用。与notify只能唤醒锁对象上所有的阻塞线程相比,Condition可以唤醒指定的阻塞线程,更加灵活。原创 2023-05-17 21:09:36 · 125 阅读 · 1 评论 -
CountDownLatch源码分析
CountDownLatch有内部类Sync,Sync继承AQS,并使用AQS的state记录主线程需要等待多少副线程,当副线程执行完任务后,调用countDown方法修改state的值,直到state的为0时主线程被唤醒原创 2023-05-17 22:04:53 · 53 阅读 · 0 评论 -
CyclicBarrier源码分析
```CyclicBarrier```按照字面意思是环绕栅栏,它的作用的让所有的线程集合到一起,然后一起执行。它与```CountDownLatch```的区别是:```CountDownLatch```是一个线程等待其他线程完成后它才进入运行状态;```CyclicBarrier```是线程之间的相互等待,只有所有的线程都到达栅栏后再一起执行原创 2023-05-18 02:20:45 · 47 阅读 · 1 评论