【线程同步和锁机制】三个售票台同时贩卖电影票

题目:

  电影院有一场电影要播出,该场次总共 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();
    }
}

 

posted @ 2022-06-21 16:36  光之咸鱼  阅读(130)  评论(0)    收藏  举报