1 package testBlog; 2 3 class MyThread implements Runnable { 4 private int ticket = 10; 5 6 @Override 7 public void run() {// 重点在此:要在覆写的run()方法中写上synchronized方法 8 int x; 9 for (x = 0; x < 20; x++) {// 执行20次sale()方法 10 this.sale(); 11 } 12 } 13 14 public synchronized void sale() {// synchronized处通常是static的位置啊.这是一个synchronized方法 15 if (ticket > 0) { 16 try { 17 Thread.sleep(200); 18 } catch (InterruptedException e) { 19 e.printStackTrace(); 20 } 21 System.out.println(Thread.currentThread().getName() + "卖票,票数剩余:" + --ticket);//这里用前减减更合适 22 } 23 } 24 25 } 26 27 public class Test { 28 public static void main(String[] args) { 29 MyThread mt = new MyThread(); 30 new Thread(mt, "票贩子A").start(); 31 new Thread(mt, "票贩子B").start(); 32 new Thread(mt, "票贩子C").start(); 33 34 } 35 }