假设有一百张票由四个售票点同时在卖,请用多线程来编程此售票过程(请在编程中避免出现一张票号被打印多次以及出现0和负数票号的情况)。
代码如下:
package com.homework.lhh;
public class Ex02 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
GetTicket g1 = new GetTicket("售票点1", ticket);
GetTicket g2 = new GetTicket("售票点2", ticket);
GetTicket g3 = new GetTicket("售票点3", ticket);
GetTicket g4 = new GetTicket("售票点4", ticket);
g1.start();
g2.start();
g3.start();
g4.start();
}
}
class Ticket {
private int ticketNum = 100;
private int temp = 0;
public int getTicketNum() {
return ticketNum;
}
public synchronized void getTicket() {
if (ticketNum != 0) {
ticketNum -= 1;
temp++;
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + " 卖出了一张票,票号为 " + temp + ", 还剩 " + ticketNum + " 张票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class GetTicket extends Thread {
private Ticket ticket;
public GetTicket(String name, Ticket ticket) {
super(name);
this.ticket = ticket;
}
@Override
public void run() {
super.run();
while (ticket.getTicketNum() != 0) {
ticket.getTicket();
}
}
}