04_多线程

1、解决线程并发安全问题的第二种方法_加Lock锁

线程并发安全可以加两种锁
<1>第一种:syncronized关键字
缺点:需要频繁判断锁对象存在与否,效率较低
<2>第二种:加Lock锁
可以手动加锁和解锁,解决了判断锁存在与否的问题。

2、LOCK锁的使用步骤

<1>、lock是接口,要用他的实现类来实现。
<2>、代码演示:

  Lock lock = new ReentrantLock();

3、小案例演示实现:

public class entity implements Runnable {
    //1、定义票数
    int ticket = 100;
    //5、创建Lock锁对象
    Lock lock = new ReentrantLock();
    @Override
    public void run() {
        //定义线程任务,提供卖票服务
        //2、进入卖票服务条件检测
        while (true){
            //4、给线程加锁,syncronized锁频繁判断锁对象的存在,而lock锁则可解决这个问题
            lock.lock();
            //3、看票的余额
            if(ticket>0){
                //6、线程要睡眠,不然其他线程拿不到资源
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程"+Thread.currentThread().getName()+"再在买第"+ticket+"张票");
                ticket--;
            }
            lock.unlock();
        }
    }
}
public class lockDemo01 {
    public static void main(String[] args) {
        entity entity = new entity();
        Thread thread = new Thread(entity);
        Thread thread1 = new Thread(entity);
        Thread thread2 = new Thread(entity);
        thread.start();
        thread1.start();
        thread2.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值