现象如图:
面试的时候经常会碰到让你举一个性能测试场景的问题:比如一个购物车,想测试一个商家库存会不会出现库存超卖的情况,如商品总数量为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(); } }