AbstractQueuedSynchronizer,Lock,Synchronized
Lock和Synchronized的区别
Lock实现了与synchronized相同的互斥性和内存可见性。
synchronized代码简单,并且与处理异常操作实现了很好的交互。 synchronized是可重入锁。
Lock提供了一种无条件的,可轮询的,定时的以及可中断的锁获取操作,所有加锁和释放锁都是显式的。
ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。 并且提供了可重入的加锁语义。它还为锁的不可用问题提供了更高的灵活性。
ReentrantLock提供了更好的活跃性,性能,公平性。
synchronized代码整洁简单
ReentrantLock必须在finally中释放。
ReentrantLock与AbstractQueuedSynchronizer http://www.importnew.com/24006.html
https://blog.csdn.net/yanyan19880509/article/details/52345422/
http://ifeve.com/introduce-abstractqueuedsynchronizer/
https://blog.csdn.net/tb3039450/article/details/69056169
AbstractQueuedSynchronizer
1:构建同步器类
2:管理同步器中的状态(基于状态的同步器)
3:维护一个资源队列,资源是线程。
AbstractQueuedSynchronizer 用来管理同步器的状态。可以用它构建同步器(ReentrantLock等)和其它同步框架。
AbstractQueuedSynchronizer给定一个状态,然后将其封装到锁的子类里面,可以为自定义锁设置一些自定义内容,比如最大访问线程数。
AQS维护的队列是当前等待资源的队列。
每个Condition维护着一个队列,该队列的作用是维护一个等待singal信号的队列。
semphore构建边界队列时,可以使用。
ExecutorService 异步框架。
创建线程池的两种方式:
1:根据线程工厂创建线程池,可以创建任意多的线程。
ThreadFactory threadFactory=Executors.defaultThreadFactory();
ExecutorService threadPoolExecutor = Executors.newCachedThreadPool(threadFactory);
2:指定线程池的大小
ExecutorService threadPoolExecutor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
最新文章
- monkeyrunner之坐标或控件ID获取方法-续
- 如何解决ajax重复提交的问题
- 设计向 20款优秀免费的Icons图标合集 (转)
- sql server中批量插入与更新两种解决方案分享
- 【hadoop2.6.0】数据丢失问题解决
- [LeetCode] Rotate Image
- Httptunnel教程
- iOS开发如何实现消息推送机制
- CF 86D Powerful array
- Control File (二)重建CONTROLFILE --- NORESETLOG
- PAT 1065 A+B and C (64bit) (20)
- JS面向对象思想(OOP)
- 在C语言控制台程序中播放MP3音乐
- eclipse(MyEclipse)插件之aptana安装
- css3中“渐变”兼容性解决方案
- System V IPC 之消息队列
- x264源代码简单分析:x264_slice_write()
- 循环中else的用法
- 解决MongoDB登录的WARNING
- OpenGL绘制一个四边形