模拟售票窗口,用4个线程模拟4个窗口在售票,共有8张票,用线程同步来实现

2025-04-07 20:21:18
推荐回答(1个)
回答1:

lz 你好


具体代码如下:

public class SellTickets{
    public static void main (String[] args) {
        new SellWindow().start();
        new SellWindow().start();
        new SellWindow().start();
        new SellWindow().start();      
    }
}
class SellWindow extends Thread{
    private static int ticket = 8;
    private static Object o = new Object();
                                                                                                                                                                                         
    public void run(){
        while(true){
            synchronized (o){
                if(ticket > 0){                                     
                    try {
                        Thread.sleep(10);
                    }
                    catch (Exception ex) {
                    }
                                                                                                                                                                                                         
                    ticket--;
                    System.out.println (getName() + " sell " + "Tickets_" + (8-ticket));                   
                }
                                                                                                                                                                                                     
                else{
                    break;
                }
            }
        }
    }
}


运行结果(由于票数很少  所以可能只有线程0就能售完):

Thread-0 sell Tickets_1

Thread-0 sell Tickets_2

Thread-0 sell Tickets_3

Thread-3 sell Tickets_4

Thread-3 sell Tickets_5

Thread-3 sell Tickets_6

Thread-3 sell Tickets_7

Thread-3 sell Tickets_8


ps:多运行几次  结果会不一样


希望能帮助你哈

(不懂得继续追问)