可以自主选择是否买票,可以增加SellTicketRes sellTicketRes = new SellTicketRes();的数量来实现一次买多张票,有待改进。
/**
* 使用同步机制解决售票问题的超卖现象
*/
import java.util.Scanner;
public class TicketSalesResult {
public static void main(String[] args) {
SellTicketRes sellTicketRes = new SellTicketRes();
new Thread(sellTicketRes).start();
}
}
class SellTicketRes implements Runnable {
int ticketNum = 3;
boolean loop = true;
/**
* 使用synchronized实现线程同步,解决超卖
*/
public synchronized void Sell() {
if (ticketNum <= 0) {
System.out.println("没有余票!");
loop = false;
return;
}
// 休眠卖票
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("窗口" + Thread.currentThread().getName() +
"售出一张票。" + "剩余票数:" + (--ticketNum));
}
@Override
public void run() {
char answer = 'T';
do {
if (loop == false) {
break;
}
Scanner myScanner = new Scanner(System.in);
System.out.println("是否买票T/F" );
answer = myScanner.next().charAt(0);
if (answer == 'F') {
break;
}
Sell();
}while(answer == 'T');
}
}
本文的创作参考:(34条消息) 使用Java多线程模拟一个售票系统_java多线程售票系统_世界尽头与你的博客-优快云博客 本文其中加入了增加的自主选择是否买票代码。