找回密码
 立即注册
搜索
热搜: Python Java C Html PHP
查看: 744|回复: 0

编程 Java多线程售票

[复制链接]

42

主题

10

回帖

8

积分

管理员

积分
8

原始用户

发表于 2026-3-16 14:57:46 | 显示全部楼层 |阅读模式

试题3、根据题目描述,使用多线程技术编写程序。

本题分值:45
考核时间:90分钟
考核方式:实操
考核内容:现火车站开设了3个窗口,共销售200张车票,要求3个窗口同时销售,每销售一张票大约要100ms时间。输出窗口卖出的第几张车票,如下所示:
窗口1:已出售第100张票
窗口3:已出售第99张票
窗口2:已出售第98张票
窗口3:已出售第97张票
窗口1:已出售第96张票
窗口3:已出售第95张票
窗口2:已出售第94张票
窗口3:已出售第93张票
窗口1:已出售第92张票
窗口3:已出售第91张票
……

请使用Java的线程技术实现该功能。

  1. import javafx.embed.swing.SwingNode;
  2. import org.omg.CORBA.TCKind;

  3. public class TicketSeller {
  4.     static class TicketResource{
  5.         private int totalTicket = 200;
  6.         private String windowName;
  7.         public synchronized boolean sellTicket(String windowName){
  8.             if(totalTicket > 0){
  9.                 try{
  10.                     Thread.sleep(10);
  11.                 }catch(InterruptedException e){
  12.                     Thread.currentThread().interrupt();
  13.                     System.out.println(windowName + "终止售票" + e.getMessage());
  14.                     return false;
  15.                 }
  16.                 System.out.println(windowName + ":已售出第" + totalTicket + "张票");
  17.                 totalTicket --;
  18.                 return true;
  19.             }else{
  20.                 return false;
  21.             }
  22.         }
  23.     }
  24.     static class WindowThread extends Thread {
  25.         private TicketResource ticketResource;
  26.         private String windowName;
  27.         WindowThread(TicketResource ticketResource,String windowName){
  28.             this.ticketResource = ticketResource;
  29.             this.windowName = windowName;
  30.         }
  31.         @Override
  32.         public void run(){
  33.             while (ticketResource.sellTicket(windowName)){

  34.             }
  35.             System.out.println(windowName + ":车票已售罄,停止售票");
  36.         }
  37.     }

  38.     public static void main(String[] args) {
  39.         TicketResource ticketResource = new TicketResource();

  40.         Thread window1 = new WindowThread(ticketResource, "窗口1");
  41.         Thread window2 = new WindowThread(ticketResource, "窗口2");
  42.         Thread window3 = new WindowThread(ticketResource, "窗口3");

  43.         window1.start();
  44.         window2.start();
  45.         window3.start();

  46.         try {
  47.             window1.join();
  48.             window2.join();
  49.             window3.join();
  50.         } catch (InterruptedException e) {
  51.             e.printStackTrace();
  52.         }
  53.         System.out.println("所有窗口售票结束,200张车票已全部售出");
  54.     }
  55. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|HELIXABYSS

GMT+8, 2026-7-21 21:17 , Processed in 0.053739 second(s), 18 queries .

Powered by Discuz! X3.5

© 2024-2026 HELIXABYSS

快速回复 返回顶部 返回列表