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());
  

最新文章

  1. monkeyrunner之坐标或控件ID获取方法-续
  2. 如何解决ajax重复提交的问题
  3. 设计向 20款优秀免费的Icons图标合集 (转)
  4. sql server中批量插入与更新两种解决方案分享
  5. 【hadoop2.6.0】数据丢失问题解决
  6. [LeetCode] Rotate Image
  7. Httptunnel教程
  8. iOS开发如何实现消息推送机制
  9. CF 86D Powerful array
  10. Control File (二)重建CONTROLFILE --- NORESETLOG
  11. PAT 1065 A+B and C (64bit) (20)
  12. JS面向对象思想(OOP)
  13. 在C语言控制台程序中播放MP3音乐
  14. eclipse(MyEclipse)插件之aptana安装
  15. css3中“渐变”兼容性解决方案
  16. System V IPC 之消息队列
  17. x264源代码简单分析:x264_slice_write()
  18. 循环中else的用法
  19. 解决MongoDB登录的WARNING
  20. OpenGL绘制一个四边形

热门文章

  1. linux mint 19解决 输入法问题
  2. [转] COM编程总结
  3. linux shell判断脚本执行时传入了多少个参数,判断脚本参数个数,参数数量
  4. Python 转义字符
  5. mybatis-spring-1.2.1 jar下载、源码下载
  6. fabric入门
  7. AngularJS』一点小小的理解
  8. WCF(一) 创建第一个WCF
  9. js中的匿名函数和匿名自执行函数
  10. maven指定项目的构建、打包和tomcat插件的pom.xml配置