线程安全问题的概述和代码实现

线程安全问题的概述

如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。

程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

 

 

 

 

 

 

线程安全问题的代码实现

 

class RunnaleImpl implements Runnable{
    //定义一个多个线程共享的票源
    private int ticket = 100;

    //设置线程任务:卖票
    @Override
    public void run() {
        //使用死循环让卖票操作重复执行
        while (true){
            //判断票是否存在
            if (ticket>0){
                //提高安全问题出现的概率,让程序睡眠
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //票存在,卖票,ticket--
                System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
                ticket--;
            }
        }
    }
}

 

public class Demo01Ticket {
    /**
     * 模拟卖票案例
     * 创建3个线程,同时开启,对共享的票进行出售
     */
    public static void main(String[] args) {
        RunnaleImpl ru = new RunnaleImpl();

        Thread t0 = new Thread(ru);
        Thread t1 = new Thread(ru);
        Thread t2 = new Thread(ru);
        t0.start();
        t1.start();
        t2.start();
    }
}

 

 可以看到线程出现了卖相同票的,那么这个线程就出现了安全问题

 

posted @ 2022-07-08 15:02  xjw12345  阅读(28)  评论(0)    收藏  举报