我是靠谱客的博主 冷艳手机,最近开发中收集的这篇文章主要介绍java unlock_Java之解决线程安全问题的第三种方法,使用Lock锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

各位小伙伴们大家好,在之前的文章中,小编主要介绍了解决线程安全问题的两种方法Java之线程安全的解决办法,同步代码和Java之解决线程安全的第二种方式,使用同步方法。这次小编要介绍的是解决线程安全问题的第三种方法,使用Lock锁,具体如下。

java.util.concurrent.locks.lock机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,同步代码块、同步方法具有的功能Lock都有,且更强大,更能体现面向对象。

Lock锁也称同步锁,加锁与释放锁方法如下:

public void lock():加同步锁。

public void unlock():释放同步锁。

使用步骤:

在成员位置创建一个ReentrantLock对象。在可能出现安全问题的代码前调用Lock接口中的方法Lock获取锁。在可能会出现安全问题的代码后调用Lock接口中的方法unlock释放锁。

36e06a6f6d3450faba007a2817feea9c.png

代码如下:

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class RunnableImp1 implements Runnable {

//定义一个多线程共享票源

private int ticket = 100;

//1.在成员位置创建一个ReentrantLock对象

Lock l =new ReentrantLock();

//设置多线程任务:卖票

public void run() {

//使用死循环,让卖票操作重复执行

while (true) {

l.lock();//2.在可能出现安全问题的代码前调用Lock接口中的方法Lock获取锁。

//判断票是否存在

if (ticket > 0) {

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

//票存在,卖票ticket--

System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");

ticket--;

}

l.unlock();//3.在可能会出现安全问题的代码后调用Lock接口中的方法unlock释放锁。

}

}

}

1193c3ab24f70dbd280cfe8ec9cac071.png

关于释放锁,还有第二种方法,使用finally,这样的话,无论程序是否异常,都会释放锁,部分代码如下:

public void run() {

//使用死循环,让卖票操作重复执行

while (true) {

l.lock();

//判断票是否存在

if (ticket > 0) {

try {

Thread.sleep(10);

//票存在,卖票ticket--

System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");

ticket--;

} catch (InterruptedException e) {

e.printStackTrace();

}finally {

l.unlock();//无论程序是否异常,都会把锁释放,可以提高程序的效率

}

}

}

}

关于解决线程安全问题的第三种方法,使用Lock锁,应该比前面两种方法简单,主要分为三步,创建一个ReentrantLock对象,在可能会出现安全问题的代码前获取锁,可能会出现安全问题的代码后释放锁。关于使用Lock锁解决线程安全问题,小编就先说到这里,希望这篇文章可以帮到大家,也欢迎各位小伙伴补充和纠错。

图片来自网络,如有侵权,请联系作者删除

最后

以上就是冷艳手机为你收集整理的java unlock_Java之解决线程安全问题的第三种方法,使用Lock锁的全部内容,希望文章能够帮你解决java unlock_Java之解决线程安全问题的第三种方法,使用Lock锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部