【线程同步和锁机制】三个售票台同时贩卖电影票
题目:
电影院有一场电影要播出,该场次总共 200 个座位(200 张票),售票一般是多个窗口同时售票 的,我们现在使用多线程模拟多个窗口进行同时售票(假设 3 个窗口)。
分析:
我们可以用synchonized保证共享对象的正确性。关键点是lock要设为全局对象,否则不同线程会有不同的lock对象。
代码:
public class Cinema implements Runnable{ int ticket = 200; static Object lock=new Object(); @Override public void run() { while(true) { synchronized (lock){ if(ticket > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在卖出第:" + (ticket--) + "张票"); }else return; } } } }
public class CinemaTest{ public static void main(String[] args) { Cinema cinema=new Cinema(); Thread g1=new Thread(cinema,"售票口1"); Thread g2=new Thread(cinema,"售票口2"); Thread g3=new Thread(cinema,"售票口3"); g1.start(); g2.start(); g3.start(); } }

使用多线程模拟影院售票
浙公网安备 33010602011771号