java多线程实现同步锁卖票实战项目
同步概念与方法:




窗口类:
public class Ticket implements Runnable{
int tickets=20;//总共20张票
@Override
public void run() {
while (tickets>0) {
synchronized (this) {
if(tickets>0) {
//售票
try {
System.out.println(Thread.currentThread().getName()+"正在售票");
Thread.sleep(200);//模拟售票操作时间
tickets--;//完成售票
System.out.println(Thread.currentThread().getName()+"售票完成,"+"剩余"+tickets+"张票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}测试类:
public class Test {
public static void main(String[] args) {
Ticket ticket = new Ticket();
//模拟三个窗口售票
Thread t1=new Thread(ticket);
t1.setName("窗口1");
t1.start();
Thread t2=new Thread(ticket);
t2.setName("窗口2");
t2.start();
Thread t3=new Thread(ticket);
t3.setName("窗口3");
t3.start();
}
}测试结果:
窗口1正在售票
窗口1售票完成,剩余19张票
窗口1正在售票
窗口1售票完成,剩余18张票
窗口1正在售票
窗口1售票完成,剩余17张票
窗口3正在售票
窗口3售票完成,剩余16张票
窗口2正在售票
窗口2售票完成,剩余15张票
窗口2正在售票
窗口2售票完成,剩余14张票
窗口2正在售票
窗口2售票完成,剩余13张票
窗口2正在售票
窗口2售票完成,剩余12张票
窗口2正在售票
窗口2售票完成,剩余11张票
窗口2正在售票
窗口2售票完成,剩余10张票
窗口2正在售票
窗口2售票完成,剩余9张票
窗口2正在售票
窗口2售票完成,剩余8张票
窗口2正在售票
窗口2售票完成,剩余7张票
窗口2正在售票
窗口2售票完成,剩余6张票
窗口2正在售票
窗口2售票完成,剩余5张票
窗口2正在售票
窗口2售票完成,剩余4张票
窗口2正在售票
窗口2售票完成,剩余3张票
窗口2正在售票
窗口2售票完成,剩余2张票
窗口2正在售票
窗口2售票完成,剩余1张票
窗口2正在售票
窗口2售票完成,剩余0张票Process finished with exit code 0
不加同步锁测试结果:
窗口3正在售票
窗口1正在售票
窗口2正在售票
窗口1售票完成,剩余18张票
窗口1正在售票
窗口2售票完成,剩余19张票
窗口3售票完成,剩余19张票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余16张票
窗口2正在售票
窗口1售票完成,剩余15张票
窗口3售票完成,剩余16张票
窗口1正在售票
窗口3正在售票
窗口3售票完成,剩余13张票
窗口1售票完成,剩余14张票
窗口1正在售票
窗口2售票完成,剩余12张票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余10张票
窗口1售票完成,剩余11张票
窗口1正在售票
窗口3售票完成,剩余11张票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余8张票
窗口1售票完成,剩余8张票
窗口3售票完成,剩余8张票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余5张票
窗口1售票完成,剩余5张票
窗口3售票完成,剩余7张票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余2张票
窗口1售票完成,剩余3张票
窗口3售票完成,剩余2张票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口3售票完成,剩余1张票
窗口2售票完成,剩余0张票
窗口1售票完成,剩余1张票Process finished with exit code 0
synchronized与Lock锁的区别:
到此这篇关于java多线程实现同步锁卖票实战项目的文章就介绍到这了,更多相关java 同步锁卖票内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Maven入门之使用Nexus搭建Maven私服及上传下载jar包
这篇文章主要介绍了Maven入门之使用Nexus搭建Maven私服及上传下载jar包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-12-12
IDEA遇到Internal error. Please refer to http://jb. gg/ide/crit
这篇文章主要介绍了IDEA遇到Internal error. Please refer to http://jb. gg/ide/critical-startup-errors的问题及解决办法,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下2020-08-08
关于Springboot | @RequestBody 接收到的参数对象属性为空的问题
这篇文章主要介绍了关于Springboot | @RequestBody 接收到的参数对象属性为空的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03


最新评论