package mythread.tickets; public class Tickets implements Runnable { static int tickets = 100; Object o = new Object(); boolean isSell = false; public void run() { // TODO Auto-generated method stub if(!isSell) { while(true) { synchronized(this.getClass()) { if(tickets>0) { try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"卖出了第"+tickets+"张票"); tickets--; } else { break; } } } } else { while(true) { if(!sell()) { break; } } } } public static synchronized boolean sell() { if(tickets>0) { try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"用sell()卖出了第"+tickets+"张票"); tickets--; return true; } else { return false; } } }
package mythread.tickets; public class TicketsTest { public static void main(String[] args) { Tickets t = new Tickets(); new Thread(t,"一号窗口").start(); try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } t.isSell = true; new Thread(t,"二号窗口").start(); // new Thread(t,"三号窗口").start(); // new Thread(t,"四号窗口").start(); } }