Lock锁机制笔记
JDK 5.0 开始,
java.util.concurrent.locks.Lock
(控制多线程对共享资源进行访问的工具)提供了对共享资源的独占访问,每次都只能有一个线程对lock对象加锁,线程开始访问资源之前应先获得Lock对象
ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语言,在实现线程安全的控制中,其中最常用的就是ReentrantLock,可以显示加锁、释放锁。
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 > 同步代码块(已经进入方法体,分配了相应资源) > 同步方法(在方法体之外);