学习过程观看视频:[狂神说Java]
https://www.bilibili.com/video/BV1B7411L7tE?p=2
欢迎大家支持噢,很良心的老师了!
1、java代码,不加synchronized,有线程安全问题
package com.zjl;
/**
* Created by zjl
* 2020/11/19
**/
/*
* 真正的多线程开发,公司中的开发
* 线程就是一个单独的资源类,没有任何附属的操作!
* 1、属性 2、方法
* */
public class SaleTicketDemo {
public static void main(String[] args) {
Ticket ticket = new Ticket();
// @FunctionalInterface 函数式接口,jdk 1.8 lambda表达式 (参数)->{代码}
new Thread(()->{
for (int i = 0; i < 60; i++) {
ticket.sale();
}
},"A线程").start();
new Thread(()->{
for (int i = 0; i < 60; i++) {
ticket.sale();
}
},"B线程").start();
new Thread(()->{
for (int i = 0; i < 60; i++) {
ticket.sale();
}
},"C线程").start();
}
}
class Ticket{
//属性 票数
private int ticketNums = 50;
//方法 卖票
public void sale(){
if(ticketNums > 0){
System.out.println(Thread.currentThread().getName() + "卖出了第" + ticketNums-- +"张票--------剩余" + ticketNums + "张票");
}
}
}
2、运行结果
3、加了synchronized,解决了线程安全问题
/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=56845:/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.SaleTicketDemo
A线程卖出了第50张票--------剩余49张票
A线程卖出了第49张票--------剩余48张票
A线程卖出了第48张票--------剩余47张票
A线程卖出了第47张票--------剩余46张票
A线程卖出了第46张票--------剩余45张票
A线程卖出了第45张票--------剩余44张票
A线程卖出了第44张票--------剩余43张票
A线程卖出了第43张票--------剩余42张票
A线程卖出了第42张票--------剩余41张票
A线程卖出了第41张票--------剩余40张票
A线程卖出了第40张票--------剩余39张票
A线程卖出了第39张票--------剩余38张票
A线程卖出了第38张票--------剩余37张票
A线程卖出了第37张票--------剩余36张票
A线程卖出了第36张票--------剩余35张票
A线程卖出了第35张票--------剩余34张票
A线程卖出了第34张票--------剩余33张票
A线程卖出了第33张票--------剩余32张票
A线程卖出了第32张票--------剩余31张票
A线程卖出了第31张票--------剩余30张票
A线程卖出了第30张票--------剩余29张票
A线程卖出了第29张票--------剩余28张票
A线程卖出了第28张票--------剩余27张票
A线程卖出了第27张票--------剩余26张票
A线程卖出了第26张票--------剩余25张票
A线程卖出了第25张票--------剩余24张票
A线程卖出了第24张票--------剩余23张票
A线程卖出了第23张票--------剩余22张票
A线程卖出了第22张票--------剩余21张票
A线程卖出了第21张票--------剩余20张票
A线程卖出了第20张票--------剩余19张票
A线程卖出了第19张票--------剩余18张票
A线程卖出了第18张票--------剩余17张票
A线程卖出了第17张票--------剩余16张票
A线程卖出了第16张票--------剩余15张票
A线程卖出了第15张票--------剩余14张票
A线程卖出了第14张票--------剩余13张票
A线程卖出了第13张票--------剩余12张票
A线程卖出了第12张票--------剩余11张票
A线程卖出了第11张票--------剩余10张票
A线程卖出了第10张票--------剩余9张票
A线程卖出了第9张票--------剩余8张票
A线程卖出了第8张票--------剩余7张票
A线程卖出了第7张票--------剩余6张票
A线程卖出了第6张票--------剩余5张票
A线程卖出了第5张票--------剩余4张票
A线程卖出了第4张票--------剩余3张票
A线程卖出了第3张票--------剩余2张票
A线程卖出了第2张票--------剩余1张票
A线程卖出了第1张票--------剩余0张票
Process finished with exit code 0