Java-多執行緒實現售票
阿新 • • 發佈:2019-01-11
假設有一百張票由四個售票點同時在賣,請用多執行緒來程式設計此售票過程(請在程式設計中避免出現一張票號被列印多次以及出現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();
}
}
}