4、JUC:Lock锁

学习过程观看视频:[狂神说Java]
https://www.bilibili.com/video/BV1B7411L7tE?p=2
欢迎大家支持噢,很良心的老师了!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

java代码示例:

package com.zjl;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by zjl
 * 2020/11/19
 **/
/*
* 真正的多线程开发,公司中的开发
* 线程就是一个单独的资源类,没有任何附属的操作!
* 1、属性   2、方法
* */
public class SaleTicketDemo2 {
    
    
    public static void main(String[] args) {
    
    
        Ticket2 ticket2 = new Ticket2();

        // @FunctionalInterface  函数式接口,jdk 1.8  lambda表达式 (参数)->{代码}
        new Thread(()->{
    
    
            for (int i = 0; i < 60; i++) {
    
    
                ticket2.sale();
            }
        },"A线程").start();
        new Thread(()->{
    
    
            for (int i = 0; i < 60; i++) {
    
    
                ticket2.sale();
            }
        },"B线程").start();
        new Thread(()->{
    
    
            for (int i = 0; i < 60; i++) {
    
    
                ticket2.sale();
            }
        },"C线程").start();
    }

}
//Lock三部曲
//1、new ReentrantLock();
//2、lock.lock();   //加锁
//3、lock.unlock();    //解锁
class Ticket2{
    
    
    //属性  票数
    private int ticketNums = 50;

    Lock lock = new ReentrantLock();

    //方法  卖票
    public void sale(){
    
    
        lock.lock();   //加锁
        try {
    
    
            if(ticketNums > 0){
    
    
                System.out.println(Thread.currentThread().getName() + "卖出了第" + ticketNums-- +"张票--------剩余" + ticketNums + "张票");
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();    //解锁
        }
    }
}

运行结果:

/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java "-javaagent:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57772:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/tools.jar:/Users/zhangjianlong/testCode/JUC-study/target/classes:/Users/zhangjianlong/apache-maven-3.6.3/repository/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar com.zjl.SaleTicketDemo2
A线程卖出了第50张票--------剩余49张票
A线程卖出了第49张票--------剩余48张票
A线程卖出了第48张票--------剩余47张票
C线程卖出了第47张票--------剩余46张票
C线程卖出了第46张票--------剩余45张票
C线程卖出了第45张票--------剩余44张票
C线程卖出了第44张票--------剩余43张票
C线程卖出了第43张票--------剩余42张票
C线程卖出了第42张票--------剩余41张票
C线程卖出了第41张票--------剩余40张票
C线程卖出了第40张票--------剩余39张票
C线程卖出了第39张票--------剩余38张票
C线程卖出了第38张票--------剩余37张票
C线程卖出了第37张票--------剩余36张票
C线程卖出了第36张票--------剩余35张票
C线程卖出了第35张票--------剩余34张票
C线程卖出了第34张票--------剩余33张票
C线程卖出了第33张票--------剩余32张票
C线程卖出了第32张票--------剩余31张票
C线程卖出了第31张票--------剩余30张票
C线程卖出了第30张票--------剩余29张票
B线程卖出了第29张票--------剩余28张票
B线程卖出了第28张票--------剩余27张票
B线程卖出了第27张票--------剩余26张票
B线程卖出了第26张票--------剩余25张票
B线程卖出了第25张票--------剩余24张票
B线程卖出了第24张票--------剩余23张票
B线程卖出了第23张票--------剩余22张票
B线程卖出了第22张票--------剩余21张票
B线程卖出了第21张票--------剩余20张票
B线程卖出了第20张票--------剩余19张票
B线程卖出了第19张票--------剩余18张票
B线程卖出了第18张票--------剩余17张票
B线程卖出了第17张票--------剩余16张票
B线程卖出了第16张票--------剩余15张票
B线程卖出了第15张票--------剩余14张票
B线程卖出了第14张票--------剩余13张票
B线程卖出了第13张票--------剩余12张票
B线程卖出了第12张票--------剩余11张票
B线程卖出了第11张票--------剩余10张票
B线程卖出了第10张票--------剩余9张票
B线程卖出了第9张票--------剩余8张票
B线程卖出了第8张票--------剩余7张票
B线程卖出了第7张票--------剩余6张票
B线程卖出了第6张票--------剩余5张票
B线程卖出了第5张票--------剩余4张票
B线程卖出了第4张票--------剩余3张票
B线程卖出了第3张票--------剩余2张票
B线程卖出了第2张票--------剩余1张票
B线程卖出了第1张票--------剩余0张票

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_41347385/article/details/109845688