synchronized(任意对象):就相当于给代码加锁了,任意对象就可以看成是一把锁。
synchronized(任意对象) { 多条语句操作共享数据的代码 }
代码演示
public class SellTicket implements Runnable { private int tickets=100; private Object obj = new Object(); @Override public void run() { while(true){ synchronized (obj){ if(tickets>0){ try { Thread.sleep(100); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票"); 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"); t1.start(); t2.start(); t3.start(); } }