• synchronized和ReentrantLock


    一、什么是sychronized


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


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

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

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


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


    二、什么ReentrantLock


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


    三.synchronized和ReentrantLock的区别


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

    了在激烈争用情况下更佳的性能。(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更多时间用在执行线程上。)

  • 相关阅读:
    [Usaco2005 open]Expedition
    舞会
    双栈维护之--Hdu4699 editor
    利用两个堆来维护第K大之Poj3784 Running Median
    Zju1061Web Navigation 网络导航
    Qsort求静态的第K大
    BZOJ2726【SDOI2012】任务安排(斜率优化Dp+二分查找)
    P2365 任务安排 斜率优化入门
    任务处理--斜率优化Dp入门
    结构体排序教学
  • 原文地址:https://www.cnblogs.com/leeplogs/p/5880461.html
Copyright © 2020-2023  润新知