代码:
1 public class MainClass { 2 3 public static void main(String[] args) { 4 method1(); 5 } 6 public static void method1() { 7 sellMovie sell = new sellMovie(); 8 9 new Thread(sell, "美團").start(); 10 new Thread(sell, "糯米").start(); 11 } 12 }
1 public class Model { 2 int total = 10; 3 }
1 public class sellMovie implements Runnable { 2 Model model = new Model(); 3 4 @Override 5 public void run() { 6 while (model.total > 0) { 7 synchronized (model) {// 只能鎖引用類型 8 9 if (model.total > 0) { 10 System.out.println("銷售票:" + model.total +" "+Thread.currentThread().getName()); 11 } else { 12 System.out.println("票售完了"); 13 return; 14 } 15 model.total--; 16 } 17 System.out.println("............."); 18 } 19 } 20 }
本例通过实现Runnable接口方法实现多线程,这里是“美团“和“糯米“两个分线程抢票的过程。
由于线程锁只能锁引用类型,所以这里将剩余票数以Model类属性的形式表现出来。
以下是一次输出结果:
銷售票:10 美團
.............
銷售票:9 糯米
.............
銷售票:8 美團
.............
銷售票:7 美團
.............
銷售票:6 糯米
.............
銷售票:5 美團
.............
銷售票:4 糯米
.............
銷售票:3 美團
.............
銷售票:2 美團
.............
銷售票:1 美團
.............
票售完了