我正在使用线程安全的队列类,并且我已经定义了insert方法的问题。 Buffer存储一个数组(elementData),该数组使用start / end变量来知道从队列中添加/删除内容的位置。它是线程安全的,所以它使用同步方法,所以我可以让多个线程引用相同的缓冲区。
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);
答案 0 :(得分:2)
编译异常是因为你的insert
方法可能抛出InterruptedException(即使你没有故意抛出它),所以调用它的每个方法都必须使用try / catch块,即使错误永远不会出现:
public static void main(String[] args) {
Buffer<Integer> b = new Buffer();
try {
b.insert(3);
} catch(InterruptedException ie) {
//error handling
e.printStackTrace();
}
}