三个窗口卖票(继承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 }