14.条件队列和AQS

目录

1状态依赖性的管理(引入条件队列)

1.1示例:将前提条件的失败传递给调用者

1.2示例:通过轮询与休眠来实现简单的阻塞

1.3条件队列(wait、notify)

2使用条件队列

2.1条件谓词

2.2过早唤醒

2.3丢失的信号

2.4通知​

2.5示例:阀门类

3显式的Condition对象

4Synchronizer剖析

5AbstractQueuedSynchronizer

6同步工具中的AQS

6.1ReentrantLock

6.2Semaphore与CountDownLatch

6.3FutureTask

6.4ReentrantReadWriteLock

总结


1状态依赖性的管理(引入条件队列)

通过轮询与休眠方式勉强解决:

14.条件队列和AQS_第1张图片

14.条件队列和AQS_第2张图片

1.1示例:将前提条件的失败传递给调用者

14.条件队列和AQS_第3张图片

14.条件队列和AQS_第4张图片

1.2示例:通过轮询与休眠来实现简单的阻塞

14.条件队列和AQS_第5张图片

14.条件队列和AQS_第6张图片

1.3条件队列(wait、notify)

14.条件队列和AQS_第7张图片

14.条件队列和AQS_第8张图片

 

2使用条件队列

2.1条件谓词

2.2过早唤醒

关键点:wait会释放锁,所以在重新获得锁后需要再次检验条件

14.条件队列和AQS_第9张图片

2.3丢失的信号

线程在等待前没有先检查条件谓词

2.4通知

14.条件队列和AQS_第10张图片

条件通知:

14.条件队列和AQS_第11张图片

2.5示例:阀门类

14.条件队列和AQS_第12张图片

代码有误

14.条件队列和AQS_第13张图片

第二节其他部分未理解待补充

 

3显式的Condition对象

14.条件队列和AQS_第14张图片

14.条件队列和AQS_第15张图片

14.条件队列和AQS_第16张图片

 

4Synchronizer剖析

14.条件队列和AQS_第17张图片

14.条件队列和AQS_第18张图片

 

5AbstractQueuedSynchronizer

14.条件队列和AQS_第19张图片

14.条件队列和AQS_第20张图片

14.条件队列和AQS_第21张图片

14.条件队列和AQS_第22张图片

14.条件队列和AQS_第23张图片

 

6同步工具中的AQS

6.1ReentrantLock

14.条件队列和AQS_第24张图片

14.条件队列和AQS_第25张图片

6.2Semaphore与CountDownLatch

14.条件队列和AQS_第26张图片

14.条件队列和AQS_第27张图片

6.3FutureTask

14.条件队列和AQS_第28张图片

6.4ReentrantReadWriteLock

14.条件队列和AQS_第29张图片

 

总结

14.条件队列和AQS_第30张图片

 

 

你可能感兴趣的:(《并发编程实战》)