public class SellTicket implements Runnable { private int tickets = 100; Object obj = new Object(); @Override public void run() { synchronized (obj) { while (true) { if (tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第" + (tickets--) + "张票"); } } } } }public class SellTicketDemo { public static void main(String[] args) { SellTicket st = new SellTicket(); Thread t1 = new Thread(st,"窗口1"); Thread t2 = new Thread(st,"窗口2"); Thread t3 = new Thread(st,"窗口3"); t2.setPriority(10); t1.setPriority(1); t1.start(); t2.start(); t3.start(); } }为什么只有一个窗口卖票
时间: 2024-02-14 08:07:09 浏览: 104
这是因为在SellTicket类中,使用了一个Object类型的obj对象来进行同步,而在SellTicketDemo类中创建的三个线程都使用了同一个SellTicket对象st,因此它们也共享了同一个obj对象。因此,当一个线程进入synchronized代码块时,其他线程会被阻塞,直到该线程执行完同步代码块并释放锁,其他线程才能进入同步代码块。由于只有一个obj对象,因此只有一个线程能够获得锁,从而执行卖票操作。
阅读全文