使用Lock锁实现线程同步

Posted lujunlong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Lock锁实现线程同步相关的知识,希望对你有一定的参考价值。

Lock锁:对需要上锁的地方上锁
1) JDK1.5后新增的功能
2)与Synchronized相比,Lock 可提供多种锁方案,更灵活
3) Java.util.concurrent.lock 中的Lock是一个接口,它的实现类是一个Java类,而不是作为语言的特性(关键字)来实现
注意:如果同步代码有异常,要将unLock0放到finally 中

 

使用步骤
1)创建Lock对象
2)调用lock0方法上锁
3)调用unlock0方法解锁

 

Lock与synchronized的区别
1) Lock是显示锁(手动开启和关闭锁,别忘关闭锁),synchronized是隐式锁
2) Lock只有代码块锁,synchronized 有代码块锁和方法锁
3)使用Lock锁,JVM将花费较少的时间来调度线程,性能更好,并且具有更好的扩展性(提供更多的子类)
4) Lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock0方法会对Lock实例对象进行加锁,因此所有对该对象调用lock)方法的线程都会被阻塞,直到该Lock对象的unlock0方法被调用

 

代码示例:

技术图片

 

 

技术图片

 

以上是关于使用Lock锁实现线程同步的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE基础(十 一 )--<线程>线程同步,死锁,Lock锁,线程通信,生产消费问题,新增的线程创建方式

Java多线程-简单使用Lock(锁)

多线程18:Lock锁

Java多线程学习笔记— “隐式同步锁(synchronized)与显式同步锁(lock)”

Linux 线程同步都有哪些方法?

python lock, semaphore, event实现线程同步