线程知识巩固第二节

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_34402358/article/details/89073893

多线程之经典案例–售票案例

 public static void main(String[] args) {
 
        System.out.println("Hello World!");
        new MyThread("张三 ").start();
        new MyThread("李四 ").start();
      
    }

    public static class MyThread extends Thread {

        // 需要卖的票数
        int mTicket = 12;

        public MyThread(String name) {
            super(name);
        }

        @Override
        public void run() {
            while (mTicket > 0) {
                if (mTicket > 0) {
                    System.out.println(getName() + "卖出了第" + mTicket + "张票");
                    mTicket--;
                } else {
                    System.out.println("票卖完了");
                }

            }
        }
    }

在这里插入图片描述

这时你就会发现因为车票没有共享,所以造成了每一个人都卖出去了12张车票,为了不引起这种换买票的行为,所以我们需要把车票共享,因此需要把车票定义为静态常量,用static修饰。这时有会出现另一种问题,可能同一时间张三和李四卖出了同一张票,为了不引起这种换买票的行为,所以我们需要把车票上锁(Synchronzied:同步锁,作用是实现线程间同步,对同步的代码加锁,使得每一次,只能有一线程进入同步块,从而保证线程间的安全性),比如张三正在卖这张票,李四就看不见了。张三不卖了,李四才能对这张车票进行处理。

 public static void main(String[] args) {

        System.out.println("Hello World!");

        new MyThread("张三 ").start();
        new MyThread("李四 ").start();
    }

    public static class MyThread extends Thread {

        // 需要卖的票数
        static int mTicket = 12;

        // 创建一个静态钥匙
        static Object key = new Object();

        public MyThread(String name) {
            super(name);
        }

        @Override
        public void run() {
            while (mTicket > 0) {
                synchronized (key) {
                    if (mTicket > 0) {
                        System.out.println(getName() + "卖出了第" + mTicket + "张票");
                        mTicket--;
                    }
                }
            }
            if (mTicket == 0) {
                System.out.println("票卖完了");
            }
            try {
                //休息一秒
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/github_34402358/article/details/89073893