首页 > 代码库 > Java多线程之分销电影票

Java多线程之分销电影票

代码:

 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 美團
.............
票售完了

 

Java多线程之分销电影票