我有这部分的课程
private static Stack<Integer> integers = new Stack<Integer>();
private static int nextInt()
{
if(integers.isEmpty())
{
refill();
}
return integers.pop();
}
public static int peekInt()
{
if(integers.isEmpty())
{
refill();
}
return integers.peek();
}
private static synchronized void refill()
{
for(int i = 0; i<7; i++)
integers.add(i);
Collections.shuffle(integers);
}
并且两个不同的线程调用方法 nextInt 和 peekInt 但有时它们会得到一个堆栈空异常但是如果它们都在获取它们的值之前调用 refill 为什么会发生这种情况。
这是异常跟踪
Exception in thread "Thread-7" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at Utility.peekInt(Utility.java:26)
at Frame$repainter.run(Frame.java:72)
at java.lang.Thread.run(Thread.java:722)