分析: 1.票数要使用同一个静态值; 2.为保证不会出现卖出同一个票数,要java多线程同步锁。 3.有一个线程卖这张票时,其他线程要等这张票卖完!
1package person.xsc.practice; 2public class SaleWindow implements Runnable { 3 private int ticket = 20; 4 @Override 5 public void run() { 6 while (true) { 7 if (!saleSuccess()) { 8 break; 9 } 10 } 11 } 12 public synchronized boolean saleSuccess() { 13 if (ticket > 0) { 14 try { 15 Thread.sleep(500); 16 } catch (InterruptedException e) { 17 e.printStackTrace(); 18 } 19 System.out.println(Thread.currentThread().getName() + " 卖 出 了 " + (ticket--)+ " 号 票 !"); 20 return true; 21 } else { 22 return false; 23 } 24 } 25 public static void main(String[] args) { 26 // 创建销售窗口对象 27 SaleWindow sw = new SaleWindow(); 28 //让第一个窗口开始买票 29 new Thread(sw).start(); 30 //让第二个窗口开始买票 31 new Thread(sw).start(); 32 // 让第三个窗口开始买票 33 new Thread(sw).start(); 34 } 35} 36输出: 37Thread-0 卖 出 了 20 号 票 ! 38Thread-0 卖 出 了 19 号 票 ! 39Thread-0 卖 出 了 18 号 票 ! 40Thread-0 卖 出 了 17 号 票 ! 41Thread-2 卖 出 了 16 号 票 ! 42Thread-2 卖 出 了 15 号 票 ! 43Thread-2 卖 出 了 14 号 票 ! 44Thread-1 卖 出 了 13 号 票 ! 45Thread-1 卖 出 了 12 号 票 ! 46Thread-1 卖 出 了 11 号 票 ! 47Thread-2 卖 出 了 10 号 票 ! 48Thread-0 卖 出 了 9 号 票 ! 49Thread-0 卖 出 了 8 号 票 ! 50Thread-2 卖 出 了 7 号 票 ! 51Thread-2 卖 出 了 6 号 票 ! 52Thread-1 卖 出 了 5 号 票 ! 53Thread-1 卖 出 了 4 号 票 ! 54Thread-1 卖 出 了 3 号 票 ! 55Thread-1 卖 出 了 2 号 票 ! 56Thread-2 卖 出 了 1 号 票 !
