java多线程模拟火车站窗口卖票的问题

package com.cal;

public class TicketsThread {
public static void main(String[] args) {

T tt=new T();

Thread thread=new Thread(tt,"窗口1");
Thread thread2=new Thread(tt,"窗口2");
Thread thread3=new Thread(tt,"窗口3");

thread.start();
thread2.start();
thread3.start();
}
}

class T implements Runnable{
//总的票数
private int count=5;

@Override
public void run() {
synchronized (this) {
while(count>0){
count--;
System.out.println(Thread.currentThread().getName()+"卖了一张票,还剩下"+count+"张票");
}
}
}
}

转载于:https://www.cnblogs.com/caoal/p/6370690.html

可以使用Java中的同步机制来实现线程同步,保证多个线程同时访问共享资源时的正确性。 下面是一个简单的例代码,模拟4个窗口同时卖50票的情况: ```java public class Station implements Runnable { private static int tickets = 50; // 初始票数 private static Object lock = new Object(); // 定义一个锁对象 private String name; public Station(String name) { this.name = name; } @Override public void run() { while (true) { synchronized (lock) { // 同步代码块 if (tickets > 0) { // 还有余票 System.out.println(name + "售出第" + tickets + "票"); tickets--; } else { // 没有余票 System.out.println(name + "已售罄"); break; } } } } } ``` 在这个例中,我们使用了一个静态变量`tickets`来表当前剩余的票数。在`run`方法中,每个线程都会进入一个同步代码块中,使用`lock`对象作为锁。在同步代码块中,首先判断当前是否还有余票,如果有,则售出一票;否则就退出循环。 下面是一个测试代码,启动4个线程模拟4个售票窗口: ```java public class Test { public static void main(String[] args) { Station station = new Station(""); new Thread(station, "窗口1").start(); new Thread(station, "窗口2").start(); new Thread(station, "窗口3").start(); new Thread(station, "窗口4").start(); } } ``` 运行该测试代码,可以看到如下输出: ``` 窗口1售出第50窗口2售出第49窗口3售出第48窗口1售出第47窗口2售出第46窗口4售出第45窗口3售出第44窗口2售出第43窗口1售出第42票 ... ``` 可以看到,4个窗口在同时售票时,没有出现重复售票的情况,证明了线程同步的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值