三个窗口卖票(继承Thread方式创建线程)之线程安全问题

 1 package day2_4;
 2 
 3 /**
 4  * 例子:创建三个窗口卖票,总票数为100张,使用继承Thread的方式
 5  * 因为没有线程对象都有自己的ticket,所以每个窗口都卖100张票
 6  * 解决方法时将ticket改为 static,但仍然有问题:执行过程中都会卖相同号的票
 7  * 存在线程安全问题,待解决
 8  *
 9  *
10  * @Author Tianhao
11  * @create 2021-02-04-11:44
12  */
13 
14 
15 class Window extends Thread {
16 
17 //    private int ticket = 100;
18 
19     //解决方案
20     private static int ticket = 1000;
21 
22 
23     @Override
24     public void run() {
25         while (true) {
26             if (ticket > 0) {
27                 System.out.println(getName() + "卖票,票号:" + ticket);
28                 ticket--;
29             } else {
30                 break;
31             }
32         }
33     }
34 }
35 
36 public class WindowTest {
37     public static void main(String[] args) {
38         Window window = new Window();
39         window.setName("窗口1");
40         window.start();
41 
42         Window window2 = new Window();
43         window2.setName("窗口2");
44         window2.start();
45 
46         Window window3 = new Window();
47         window3.setName("窗口3");
48         window3.start();
49     }
50 
51 }

 

posted @ 2021-02-05 14:08  dog_IT  阅读(144)  评论(0编辑  收藏  举报