返回顶部
首页 > 资讯 > 精选 >Java多线程如何实现模拟12306火车站售票系统
  • 937
分享到

Java多线程如何实现模拟12306火车站售票系统

2023-06-15 05:06:08 937人浏览 八月长安
摘要

这篇文章主要介绍Java多线程如何实现模拟12306火车站售票系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该系统一共涉及到3个类:车票(Ticket)12306系统(System12306)售票窗口(Windo

这篇文章主要介绍Java多线程如何实现模拟12306火车站售票系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

该系统一共涉及到3个类:

  • 车票(Ticket)

  • 12306系统(System12306)

  • 售票窗口(Window)

车票类,涉及三个属性:

  • 起始站

  • 终点站

  • 票价

public class Ticket {    //起始站    private String startStation;    //终点站    private String destination;        //票价    private Float price;    public Ticket(){}    public Ticket(String startStation, String destination, Float price) {        this.startStation = startStation;        this.destination = destination;        this.price = price;    }    //为了让打印输出时方便,我们重写toString方法    public String toString() {        StringBuilder builder = new StringBuilder("[");        builder.append(this.startStation);        builder.append("--->");        builder.append(this.destination);        builder.append(":");        builder.append(this.price);        builder.append("]");        return builder.toString();    }    //get() and set()....}

12306系统,有一个属性—>Vector集合,有一个方法—>获取一张车票getTicket()

  • 利用Vector集合存储该系统所有的车票

  • 利用Vector的线程安全特性,同一时间只能有一个线程操作该集合,保证安全

  • 并且该系统应该是单例的

public class System12306 {    //设计一个单例模式    private System12306(){}    private static volatile System12306 sys;    public static System12306 getInstance(){        if (sys == null){            synchronized (System12306.class){                if(sys == null)                    sys = new System12306();            }        }        return sys;    }    //属性,用一个集合存票,我们使用线程安全的Vector,或者使用Stack,它继承了Vector    private Vector<Ticket> tickets = new Vector<>();    private String[] starts = {"北京","天津","太原","运城","西安"};    private String[] ends = {"上海","武汉","苏州","深圳","昆明","广州"};    //当前系统创建后,就给tickets集合赋值    {        for(int i = 10;i<100;i++){//一共90张票            int r1 = (int)(Math.random()*starts.length);            int r2 = (int)(Math.random()*ends.length);            float price = r1*r2*5+140;            tickets.add(new Ticket(starts[r1],ends[r2],price));        }    }    //设计一个方法,从集合中获取一张票    public Ticket getTicket(){        try {            return tickets.remove(0);        }catch (Exception e){            return null;        }    }}

售票窗口类,有一个属性—>窗口名称,有一个方法—>出售车票sellTicket()

同一时间有多个窗口同时售票,该类实现了Runnable接口,达到多线程并发的效果

public class Window implements Runnable {    private String windowName;//窗口的名字    public Window(String windowName){        this.windowName = windowName;    }    @Override    public void run() {        this.sellTicket();    }    public void sellTicket(){        while (true){            System12306 sys = System12306.getInstance();            Ticket ticket = sys.getTicket();            if(ticket==null){                System.out.println("对不起,"+windowName+"窗口车票已售完...");                break;            }            System.out.println("从"+windowName+"窗口售出:"+ticket);        }    }}

测试代码:

public class TestMain {    public static void main(String[] args) {        Window win1 = new Window("北京西站");        Window win2 = new Window("运城北站");        Window win3 = new Window("太原南站");        new Thread(win1).start();        new Thread(win2).start();        new Thread(win3).start();    }}

多线程并发执行的效果:

Java多线程如何实现模拟12306火车站售票系统

以上是“Java多线程如何实现模拟12306火车站售票系统”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java多线程如何实现模拟12306火车站售票系统

本文链接: https://lsjlt.com/news/278130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java多线程实现模拟12306火车站售票系统
    该系统一共涉及到3个类: 车票(Ticket) 12306系统(System12306) 售票窗口(Window) 车票类,涉及三个属性: 起始...
    99+
    2024-04-02
  • Java多线程如何实现模拟12306火车站售票系统
    这篇文章主要介绍Java多线程如何实现模拟12306火车站售票系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该系统一共涉及到3个类:车票(Ticket)12306系统(System12306)售票窗口(Windo...
    99+
    2023-06-15
  • Python多线程实现模拟火车站售票
    本文实例为大家分享了Python多线程模拟火车站售票的具体代码,供大家参考,具体内容如下 Python的标准库提供了两个模块:thread和threading,thread是低级模块...
    99+
    2024-04-02
  • java多线程之火车售票系统模拟实例
    1.前言为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票。2.非同步代码package com.tl.skyLine.thread; public class SellTic...
    99+
    2023-05-31
    java 多线程 模拟售票
  • Java 多线程的火车站售票实例分析
    这篇文章给大家介绍Java 多线程的火车站售票实例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。package com.thread;import java.util.*;public ...
    99+
    2023-06-02
  • Java实战之多线程模拟站点售票
    目录一、实验题目二、分析三、完整代码:一、实验题目 二、分析 哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就...
    99+
    2024-04-02
  • java多线程模拟实现售票功能
    铁道部发布了一个售票任务,要求销售1000张票,要求有3个窗口来进行销售,请编写多线程程序来模拟这个效果。 1 线程类 测试方法: public static void main...
    99+
    2024-04-02
  • 怎么在Java中利用多线程模拟站点售票
    怎么在Java中利用多线程模拟站点售票?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、实验题目二、分析哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建...
    99+
    2023-06-15
  • Java多线程编程小实例模拟停车场系统
    下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下:Park类public class Park {boolean []park=new boolean[3]; public bool...
    99+
    2023-05-30
    java 多线程 ava
  • Python使用面向对象方式创建线程实现12306售票系统
    目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便...
    99+
    2022-06-04
    线程 面向对象 方式
  • 如何利用C++实现一个简单的火车票订购系统?
    随着人们工作和生活方式的变化,越来越多的人选择乘坐火车出行。因此,实现一个简单的火车票订购系统可以方便用户预订车票,同时也可以提高工作效率,减少人力投入。本文将介绍如何使用C++实现一个简单的火车票订购系统,以方便读者学习和实践。一、需求分...
    99+
    2023-11-03
    C++ 火车票 订购系统
  • Java如何实现ATM机模拟系统
    这篇“Java如何实现ATM机模拟系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何实现ATM机模拟系统”文章吧...
    99+
    2023-07-02
  • Java中的多线程如何实现单例模式
    这期内容当中小编将会给大家带来有关Java中的多线程如何实现单例模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java多线程中的单例模式一、在多线程环境下创建单例方式一:package com.iet...
    99+
    2023-05-31
    java 线程 单例模式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作