AQS同步组件

  • CountDownLatch(只有一个线程对他进行操作):

    主线程必须在启动其它线程后立即调用await()方法。这样主线程的操作就会在这个方法上阻塞,直到其它线程完成各自的任务。

  • Semaphore

    控制某个资源可被同时访问的个数  

  • CyclicBarriar

    N个线程相互等待相互等待到某个公共屏障点,然后这一组线程再同时执行。

  • ReentrantLock(类比sycronized:sycronized是通过jvm实现):

    (可重入锁,可指定公平锁还是非公平锁)(避免线程进入内核阻塞态)

ReentrantLock和synchronized的区别,了解synchronized的实现原理吗?

  1. 锁的实现:Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制实现和用户自己敲代码实现的区别。前者的实现是比较难见到的,后者有直接的源码可供阅读。
  2. 性能的区别:在Synchronized优化之前,Synchronized性能是比ReenTrantLock差很多的,但是自从Synchronized引入偏向锁,轻量级锁后,两者的性能就差不多了,两种方法都可用的情况下,官方甚至建议使用sychonized
  3. 功能的区别:Synchronized的使用比较方便简洁,并且由编译器去保证的加锁和释放锁,为了避免忘记手工释放造成死锁,所以最好在finally中声明释放锁。
  4. 锁的粒度和灵活度:很明显ReenTrantLock优于Sychronized。
  5. ReenTrantLock独有的能力:

    1.ReenTrantLock可以指定是公平锁还是非公平锁,而synchronized只能是非公平锁。所谓的公平锁就是先等待的线程先获得锁;

    2.ReenTrantLock提供了一个Condition(条件)类,用来实现分组唤醒需要唤醒的线程们,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程。

    3.  ReenTrantLock提供了一种能够中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制。

   ReenTrantLock实现的原理:ReenTrantLock的实现是一种自旋锁,通过循环调用CAS操作来实现加锁。它的性能比较好也是因为避免了使线程进入内核态的阻塞状态。想尽办法避免线程进入内核的阻塞状态是我们去分析和理解锁设计的关键钥匙。

StampLock:乐观锁和悲观锁

Condition:多线程间的通信类

FutureTask:(callable开辟线程,在任务结束后,能得到任务执行的结果)

Fork/join框架:(用的少)

AQS同步组件及ReentrantLock和synchronized的区别的更多相关文章

  1. AQS 原理以及 AQS 同步组件总结

    1 AQS 简单介绍 AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面. AQS 是一个用来构建锁和同步 ...

  2. 高并发第十一弹:J.U.C -AQS(AbstractQueuedSynchronizer) 组件:Lock,ReentrantLock,ReentrantReadWriteLock,StampedLock

    既然说到J.U.C 的AQS(AbstractQueuedSynchronizer)   不说 Lock 是不可能的.不过实话来说,一般 JKD8 以后我一般都不用Lock了.毕竟sychronize ...

  3. 死磕 java同步系列之ReentrantLock VS synchronized——结果可能跟你想的不一样

    问题 (1)ReentrantLock有哪些优点? (2)ReentrantLock有哪些缺点? (3)ReentrantLock是否可以完全替代synchronized? 简介 synchroniz ...

  4. AQS原理以及AQS同步组件总结

    1 AQS简单介绍 2 AQS原理

  5. ReentrantLock和synchronized的区别

    一.ReentrantLock类 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票.定时锁等候和可中断锁等候的一些特性 ...

  6. ReentrantLock与synchronized的区别

    1.与synchronized相比,ReentrantLock提供了更多,更加全面的功能,具备更强的扩展性.例如:时间锁等候,可中断锁等候,锁投票. 2.ReentrantLock还提供了条件Cond ...

  7. ReentrantLock和synchronized的区别随笔

    http://wsmajunfeng.iteye.com/blog/1492316 可重入锁 ReentrantLock 的含义是: 当某个线程获取某个锁后,在未释放锁的情况下,第二次再访问该锁锁定的 ...

  8. 构建锁与同步组件的基石AQS:深入AQS的实现原理与源码分析

    Java并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如ReentrangLock.Semaphore,它们的实现都用到了一个共同的基类--AbstractQueuedS ...

  9. (转)ReentrantLock与Synchronized同步区别

    转自:http://blog.csdn.net/fw0124/article/details/6672522 原文:http://www.ibm.com/developerworks/cn/java/ ...

随机推荐

  1. 2457: [BeiJing2011]双端队列

    2457: [BeiJing2011]双端队列 链接 很奇妙的转化. 题目要求最后的所有序列也是有序的,所以可以求出最后的序列(即排序后的序列),然后分成许多份,要求每一份都是一个双端序列,求最少分成 ...

  2. shell -- shift用法

    shift是Unix中非常有用的命令.可以使命令参数左移,从而使脚本程序中命令参数位置不变的情况下依次遍历所有参数.如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1. ...

  3. malloc分配失败的两个现象

    在实际代码中,malloc的反复分配释放,可能会导致某一次malloc分配失败,虽然上一次调用malloc分配成功(然后释放),下一次在相同地方调用malloc分配可能会失败,疑问在于,既然上一次分配 ...

  4. 多表头的DataGridView

           上次在程序中要用到多表头的DataGridView,在网上搜索了一个,感觉还不错,现在简单的介绍一下它的用法.首先得把这个dll拷贝到相应的目录下,dll名称是myMultiColHea ...

  5. python语句和语法

    python语句和语法 python程序结构: 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. python的语法实质上是有语句和表达式组成的.表达式处理对 ...

  6. Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总

    Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...

  7. python基础训练营04-函数

    任务四  函数的关键字 函数的定义 函数参数与作用域 函数返回值 一.函数的关键字: def 二.函数的定义: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号 ...

  8. 无法注册DLL/OCX:regsvr32 failed with exit code 0x5

    最近在服务器上装一个等值线控件,确报错: RegSvr32 failed with exit code 0x5   尝试解决方法1: 在cmd下 运行for %1 in (%windir%\syste ...

  9. C++ XML文件解析

    使用tinyxml2库,git地址https://github.com/leethomason/tinyxml2 只需要使用tinyxml2.h tinyxml2.cpp即可,同时需要using na ...

  10. mongodb数据库操作之简单查询

    1. 2. 3.修改器 默认一条一条修改 4. 5.查询 6.mysql简单操作