public class Test{
private int count = 5;//模拟库存量
public void reduceStock(){//模拟减少库存
count--;
System.out.println("还剩" + count);
}
}
如上代码片段中有一个实例变量,如果在一个多线程高并发的场景下运行,会存在线程安全问题吗?答案是非常有可能。
假设多线程场景下,A线程执行count–,被中断了,然后B线程进来执行count–,也断中断了,然后C线程进来执行count–,又被中断了,然后D线程进来执行count–,又被中断了。此时ABCD四个线程中的count值都是4。然后ABCD线程分别执行打印语句,打印出来的结果都是4,库存的理想状态应该是依次递减的,不应该都存在着都打印出4的情况,因此在这种情况下该实例变量可能存在线程安全问题。