JAVA,线程安全问题,多个线程抢一个共享数据源

现象如图:

 面试的时候经常会碰到让你举一个性能测试场景的问题:比如一个购物车,想测试一个商家库存会不会出现库存超卖的情况,如商品总数量为100个,在多线程访问的情况下,会不会出现线程安全的问题,就像上面剩余数量出现-1的场景。

 演示代码:

实现类

package com.java.day18;
// 线程安全
public class ThreadSafe implements Runnable{
    private int ticket = 100;
    // 设置线程任务,卖票
    @Override
    public void run() {
        while (true){
            if (ticket > 0) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
                ticket--;
            }
        }

    }
}

测试类:

package com.java.day18;
// 模拟卖票
public class TestThreadSafe {
    public static void main(String[] args) {
        ThreadSafe tf = new ThreadSafe();
        Thread td1 = new Thread(tf);
        Thread td2 = new Thread(tf);
        Thread td3 = new Thread(tf);
        td1.start();
        td2.start();
        td3.start();
    }
}

原文地址:https://www.cnblogs.com/xiamaojjie/p/14992308.html