• synchronized和ReentrantLock区别


    一.什么是sychronized

    sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类.

    在修饰代码块的时候需要一个reference对象作为锁的对象.

    在修饰方法的时候默认是当前对象作为锁的对象.

    在修饰类时候默认是当前类的Class对象作为锁的对象.


    synchronized会在进入同步块的前后分别形成monitorenter和monitorexit字节码指令.在执行monitorenter指令时会尝试获取对象的锁,如果此没对象没有被锁,或者此对象已经被当前线程锁住,那么锁的计数器加一,每当monitorexit被锁的对象的计数器减一.直到为0就释放该对象的锁.由此synchronized是可重入的,不会出现自己把自己锁死.


    二.什么ReentrantLock

    以对象的方式来操作对象锁.相对于sychronized需要在finally中去释放锁 

    三.synchronized和ReentrantLock的区别

    除了synchronized的功能,多了三个高级功能.

    等待可中断,公平锁,绑定多个Condition.

    1.等待可中断

    在持有锁的线程长时间不释放锁的时候,等待的线程可以选择放弃等待.   tryLock(long timeout, TimeUnit unit)

    2.公平锁

    按照申请锁的顺序来一次获得锁称为公平锁.synchronized的是非公平锁,ReentrantLock可以通过构造函数实现公平锁.    new RenentrantLock(boolean fair)

    3.绑定多个Condition

    通过多次newCondition可以获得多个Condition对象,可以简单的实现比较复杂的线程同步的功能.通过await(),signal();


  • 相关阅读:
    [转]The Machine SID Duplication Myth (and Why Sysprep Matters)
    The Machine SID Duplication Myth (and Why Sysprep Matters)
    [转]Shell(Bash) mysql数据库操作
    [转]GNU Sourcehighlight 语法高亮代码
    [原]DRBD双主模式问题
    mpstat
    DRBD试用
    drbd双主模式问题
    虚IP的添加和删除
    为什么5%的技术人员开发效率是其他95%的20倍?
  • 原文地址:https://www.cnblogs.com/Zyf2016/p/6337758.html
Copyright © 2020-2023  润新知