使用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方法被调用

 

代码示例:

 

 

 

posted @ 2020-01-06 22:38  Princess1  阅读(338)  评论(0编辑  收藏  举报