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 }