Lock锁机制笔记

Lock锁

JDK 5.0 开始,java.util.concurrent.locks.Lock (控制多线程对共享资源进行访问的工具)提供了对共享资源的独占访问,每次都只能有一个线程对lock对象加锁,线程开始访问资源之前应先获得Lock对象

  • ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语言,在实现线程安全的控制中,其中最常用的就是ReentrantLock,可以显示加锁、释放锁。

 

区别于syn锁,lock锁是显性的锁代码块;(手动规定作用区间)

 class A{
     private final ReentrantLock lock = new ReenTrantLock();
     publick void m(){
         lock.lock();
         try{
             //保证线程安全的代码;
        }
         finally{
             lock.unlock();
             //如果同步代码异常,要将unlock()写入finally语句块
             //一般的都直接写上
        }
    }
     
 }

syn锁与lock锁对比

  • lcok:显示锁,手动开关锁;syn隐式锁,出了作用于自动释放;

  • lock只有代码块锁;syn有代码块和方法锁;

  • lock锁,JVM花费较少时间来调度线程,性能更好,并且具有更好的扩展性(子类更多)

  • 优先使用顺序:***lock > 同步代码块(已经进入方法体,分配了相应资源) > 同步方法(在方法体之外);

posted @ 2022-02-25 15:08  devynlime  阅读(56)  评论(0编辑  收藏  举报