1 package day2_4;
2
3 /**
4 * 例子:创建三个窗口卖票,总票数为100张,使用实现Runnable接口
5 * 因为三个线程是共享Window2对象的,所以也是共享ticket变量的,自然就不用static修饰 ticket了
6 * 仍存在线程安全问题,待解决(还是会有多个线程卖出少量的相同号的票)
7 *
8 * @Author Tianhao
9 * @create 2021-02-04-14:36
10 */
11
12 class Window2 implements Runnable {
13 //可以不用static 修饰 ticket了
14 private int ticket = 100;
15
16 @Override
17 public void run() {
18 // while (ticket>0) {
19 // System.out.println(Thread.currentThread().getName() + "卖票,票号:" + ticket);
20 // ticket--;
21 // }
22
23 while (true) {
24 if (ticket > 0) {
25 try {
26 Thread.sleep(100);
27 } catch (InterruptedException e) {
28 e.printStackTrace();
29 }
30 System.out.println(Thread.currentThread().getName() + "卖票,票号:" + ticket);
31 ticket--;
32 } else {
33 break;
34 }
35 }
36 }
37 }
38
39
40 public class WindowTest2 {
41 public static void main(String[] args) {
42 Window2 w = new Window2();
43 //Thread构造器内都是同一个Window2对象w,所以共享ticket成员变量
44 Thread t1 = new Thread(w);
45 Thread t2 = new Thread(w);
46 Thread t3 = new Thread(w);
47 t1.setName("窗口1");
48 t2.setName("窗口2");
49 t3.setName("窗口3");
50 t1.start();
51 t2.start();
52 t3.start();
53
54 }
55 }