ToB企服应用市场:ToB评测及商务社交产业平台

标题: JUC并发编程学习笔记(二)Lock锁(重点) [打印本页]

作者: 天空闲话    时间: 2023-12-1 04:19
标题: JUC并发编程学习笔记(二)Lock锁(重点)
Lock锁(重点)

传统的synchronized
传统的解决多线程并发导致的一些问题我们会使用synchronized关键字来解决,synchronized的本质就是队列、锁。

Lock的实现类有:可重复锁(最常用)、读锁、写锁

在创建可重复锁时,可传入boolean类型值来决定该锁是公平锁(先来后到)还是非公平锁(可插队)。

三部曲
1、创建一个锁
  1. Lock lock = new ReentrantLock(true);
复制代码
2、加锁
  1. lock.lock();
复制代码
3、将业务代码块包裹在try{}cath(){}finally{lock.unlock();}中
  1. try {
  2.             if (number>0){
  3.                 System.out.println(Thread.currentThread().getName()+":卖出了第"+ number-- +"张票;"+"剩余"+number+"张票");
  4.             }
  5.         }catch (Exception e){
  6.             e.printStackTrace();
  7.         }finally {
  8.             lock.unlock();
  9.         }
复制代码
完整给一个业务加锁
  1. class Ticket2{    private int number = 50;    Lock lock = new ReentrantLock(true);    public void sale(){        lock.lock();        try {
  2.             if (number>0){
  3.                 System.out.println(Thread.currentThread().getName()+":卖出了第"+ number-- +"张票;"+"剩余"+number+"张票");
  4.             }
  5.         }catch (Exception e){
  6.             e.printStackTrace();
  7.         }finally {
  8.             lock.unlock();
  9.         }    }}
复制代码
公平锁结果

非公平锁结果

从结果上看,非公平锁和synchronized关键字效果一样。
synchronized和Lock锁的区别

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4