我一直在做一个需要同步队列的项目,因为我的程序是多线程的,线程可以访问这个队列。我使用 arraylist 来做到这一点,但我似乎有一些问题并且线程陷入僵局。我不知道队列是否是原因,但我只是想检查一下:
public class URLQueue {
private ArrayList<URL> urls;
public URLQueue() {
urls = new ArrayList<URL>();
}
public synchronized URL remove() throws InterruptedException {
while (urls.isEmpty())
wait();
URL r = urls.remove(0);
notifyAll();
return r;
}
public synchronized void add(URL newURL) throws InterruptedException {
urls.add(newURL);
notifyAll();
}
public int getSize() {
return urls.size();
}
}
编辑:即使在使用 LinkedBlockingQueue 时,我也会陷入与以前相同的循环中。我认为这是因为有一个线程正在等待队列被填充,但它从来没有因为其他功能已经完成运行......任何想法???