线程数据安全04-----使用Lock锁

本文详细介绍了如何在Java中使用ReentrantLock进行线程同步,包括创建ReentrantLock实例、lock()和unlock()方法的使用,并通过示例展示了如何在SaleTackets类中控制票务销售。多线程环境下,正确管理锁对于并发控制至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我们讲解使用Lock来给线程加锁 就像我们之前使用synchronized方法来加锁一样
Lock是一个接口 我们要使用多态的方式 使用接口的实现类对象ReentrentLock 来创建对向

       ReentrentLock 构造方法
    ReentrentLock();
    成员方法
    lock()  ;  添加锁
    unLock()  ;  释放锁

线程代码

public class SaleTackets implements Runnable{



private int tickets = 1 ;
//创建一个锁的对象
private Lock lock = new ReentrantLock(); //使用多态创建对象


@Override
public void run() {


while (true){

try{
//添加锁
lock.lock();
if (tickets <= 100){
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
tickets++;
}

//休息一下
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}


}finally {

//释放锁 为了防止释放锁之前程序就因为异常退出了,而导致锁没有被打开
// 我们要使用try{} finally{} 让锁一定会被打开
lock.unlock();


}



}



}
}

测试代码 mian方法


public class testDemo {

public static void main(String[] args) {


//线程资源
SaleTackets saleTackets = new SaleTackets();

//创建线程
//创建线程
Thread thread1 = new Thread(saleTackets,"窗口一");
Thread thread2 = new Thread(saleTackets,"窗口二");
Thread thread3 = new Thread(saleTackets,"窗口三");


//开启线程
thread1.start();
thread2.start();
thread3.start();

}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值