编写一个火车票买票程序--3个窗口同时售票

 /*

  实现Runnable接口 创建Thread类 共享一个数据

  编写一个 火车站卖票程序--3个窗口同时卖票

  */

  class PPimplements Runnable{ //实现了一个Runnable接口的类PP

  public inttickets=100; //共同拥有100张票

  String str=newString("123"); //创建String对象 把局部名字传进同步参数里

  public void run(){

  while(true){ //当条件为真

  synchronized(this.str){//(同步的参数必须是一个对象的名字)

  //当tt线程判断条件为真,把str锁上,执行内部的代码,当内部代码没有执行完,CPU有可能会被其他线程抢去,但是当判断同步有锁

  //它就会在外面等着,进不来,保证了只有一个线程在内部执行,直到tt把内部代码执行完退出之后,会在次跟tt1在同一起跑线上抢占CPU的执行权

  if(tickets>0){

  System.out.println(Thread.currentThread().getName()+"卖出去的票数是:"+tickets);

  tickets--;

  }

  else

  {

  break;

  }

  }

  }

  }

  }

  public classThreade_14 {

  public static voidmain(String[] args) {

  PP pp =new PP();

  Thread tt1=newThread(pp); //构造Thread对象 实现Runnable类PP

  Thread tt2=newThread(pp);

  Thread tt3=newThread(pp);

  tt1.start(); //开启线程

  tt2.start();

  tt3.start();

  }

  }

   

以下是用Java语言实现的例子: ```java public class TicketSeller implements Runnable { private static int totalTickets = 200; // 总数 private static Object lock = new Object(); // 锁 private String name; // 售票点名称 public TicketSeller(String name) { this.name = name; } @Override public void run() { while (true) { synchronized (lock) { if (totalTickets > 0) { // 还有 totalTickets--; System.out.println(name + "卖出了1张,还剩" + totalTickets + "张"); } else { // 没有了 System.out.println(name + "没有了"); break; } } } } public static void main(String[] args) { TicketSeller seller1 = new TicketSeller("售票点1"); TicketSeller seller2 = new TicketSeller("售票点2"); TicketSeller seller3 = new TicketSeller("售票3"); new Thread(seller1).start(); new Thread(seller2).start(); new Thread(seller3).start(); } } ``` 上述代码中,我们定义了一个 `TicketSeller` 类,实现了 `Runnable` 接口,重写了 `run` 方法。在 `run` 方法中,我们使用 `synchronized` 关键字对共享变量 `totalTickets` 进行加锁,保证了线程安全。每个线程都会不断地尝试卖,如果还有,则将总数减1,并输出卖信息,否则退出循环。 在 `main` 方法中,我们创建了三个 `TicketSeller` 对象,分别代表三个售票点,然后将它们作为参数创建了三个线程并启动。由于线程是并发执行的,所以三个售票点可以同时买票。当总数卖完了之后,所有线程都会退出循环。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值