我正在使用线程安全队列类,并且我定义的插入方法有问题。缓冲区存储一个数组(elementData),该数组使用开始/结束变量来了解从队列中添加/删除内容的位置。它是线程安全的,因此它使用同步方法,因此我可以让多个线程引用同一个缓冲区。
public class Buffer<T> {
private T[] elementData;
private int elementCount;
private int start;
private int end;
// Additional fields
// Code to instantiate a Buffer, other methods (e.g. delete)
public synchronized void insert(T t) throws InterruptedException {
while (elementCount == elementData.length) {
wait();
}
end = (end + 1) % elementData.length;
elementData[end] = t;
elementCount++;
notifyAll();
}
public static void main(String[] args) {
Buffer<Integer> b = new Buffer();
b.insert(3);
}
}
这是我对情况的理解。当调用诸如 insert 之类的方法时,我们希望能够抛出一个异常,该异常可能会在 main 方法或其他线程被调用并尝试在其挂起时执行 insert 时发生。但我不明白为什么我会得到这个未报告的异常。我认为在方法之后有一个“抛出 InterruptedException”就足够了。我需要一个“尝试”块吗?我对 try 块的尝试都失败了,所以我对如何修复这个错误有点困惑。
另外,我知道我没有任何实际的线程在运行。一旦我可以修复这个未报告的异常,我会做这些。:) 感谢任何能提供帮助的人。
Buffer.java:56: unreported exception java.lang.InterruptedException; must be caught or declared to be thrown
b.insert(3);