LinkedList与LinkedBlockingQueue性能

时间:2016-03-14 10:24:52

标签: java collections

我接下来的代码:

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肯定更慢)更快地完成此类任务?

1 个答案:

答案 0 :(得分:0)

所以第一个问题可以回答:LinkedBlockingQueue在init阶段(构造函数)分配内存。但是LinkedList在运行时阶段每次插入操作都会这样做。