Lock锁与Synchronized锁的区别

Synchronzied属于我们java中内置关键字,底层jdk帮我们封装好了,lock是基于aqs封装的锁。

Synchronzied可以理解为自动挡,当代码运行完毕,或者程序抛出异常的情况下才会释放锁。

Lock:可以完全人为控制获取锁,释放锁,扩展性非常高。

代码演示Lock锁:

我们来写一个卖票的程序:

public class TestDemo implements Runnable {

    //定义100张票
    private static int count = 100;
    //定义一个lock锁
    private Lock lock = new ReentrantLock();

    @Override
    public void run() {
        //票数大于零,才让做卖票操作
        while (count > 0) {
            manuaTicketing();
        }

    }


    private void manuaTicketing() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        try {
            //获取锁
            lock.lock();
            if (count > 0) {
                System.out.println(Thread.currentThread().getName() + "卖出了第" + (100 - count+1) + "张票");
                count--;
            }else{
                System.out.println("票都卖完啦!!!");
            }

        }catch (Exception e){

        } finally {
            //释放锁
           lock.unlock();
        }
    }

    public static void main(String[] args) {
        //开几个窗口开始卖票
        TestDemo testDemo = new TestDemo();
        new Thread(testDemo).start();
        new Thread(testDemo).start();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值