Java多线程售票机制,为什么只有一个线程输出?

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

    SellTicket03 sellTicket03 = new SellTicket03();
    new Thread(sellTicket03).start();//第一个线程
    new Thread(sellTicket03).start();//第二个线程
    new Thread(sellTicket03).start();//第三个线程
}

}

//实现接口方式,使用synchronized实现线程同步
class SellTicket03 implements Runnable{

private static int num = 100;
private boolean loop = true;

public synchronized  void sell(){//使用同步方法,在同一时刻,只能有一个线程来操作sell方法

        if(num <=  0){
            System.out.println("没票了");
            loop = false;
            return;
        }

        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("窗口"+ Thread.currentThread().getName()  + "卖出了一张票,剩余" + (--num));
    }

@Override
public  void run() {
    while (loop){
       sell();//是一个同步方法
    }
}

}

你把票的数量增多

不要使用sleep,sleep方法会释放cpu资源,但是不会释放锁,其他线程无法获取到锁,只有一个线程可以持有锁运行,换用wait方法