同步代码块:synchronized(同步监视器){
}
其中同步监视器里填的对象要是唯一的。例如Window.class
线程1:实现Runable接口
class Window implements Runnable{ int ticketNumber=100; @Override public void run() { while (true){ synchronized (Window.class){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if (ticketNumber>0) { System.out.println(Thread.currentThread().getName() + "售票成功,售票号为:" + ticketNumber); ticketNumber--; }else { break; } } } } } public class SaleTicket { public static void main(String[] args) { Window w1=new Window(); Thread t1=new Thread(w1); Thread t2=new Thread(w1); Thread t3=new Thread(w1); t1.start(); t2.start(); t3.start(); } }
线程2 :继承Thread类
class Window1 extends Thread{ static int ticketNumber1=100; @Override public void run() { while (true){ synchronized (Window1.class){ if (ticketNumber1 >0) { System.out.println(Thread.currentThread().getName()+"售票成功,售票号为:"+ticketNumber1); ticketNumber1--; }else { break; } } } } } public class SaleTicket1 { public static void main(String[] args) { Window1 window1=new Window1(); Window1 window2=new Window1(); Window1 window3=new Window1(); window2.start(); window1.start(); window3.start(); } }