我接下来的代码:
LinkedBlockingQueue< String > messages = new LinkedBlockingQueue< >( INITIALCAPACITY );
//current thread calls
private synchronized String waitMessages() throws InterruptedException {
while( messages.isEmpty() ) {
wait();
}
return messages.remove( );
}
//another thread calls
public synchronized void received( String message ) {
messages.add( message );
notify();
}
因此,我为LinkedBlockingQueue和LinkedList运行此代码相同的输入数据,我发现第一个实现比LinkedList执行得更快。这对我来说是一种奇怪的行为,因为我认为LinkedBlockingQueue需要额外的时间来进行内部阻塞机制。
1)你能解释一下这样的结果吗?
2)是否有任何Queue(或List)实现比LinkedBlockingQueue(ArrayList肯定更慢)更快地完成此类任务?
答案 0 :(得分:0)
所以第一个问题可以回答:LinkedBlockingQueue在init阶段(构造函数)分配内存。但是LinkedList在运行时阶段每次插入操作都会这样做。