ArrayBlockingQueue:访问特定元素

时间:2015-02-04 09:14:22

标签: java multithreading thread-safety

我有一个像这样声明的ArrayBlockingQueue:

private BlockingQueue<E> queue = new ArrayBlockingQueue<E>();

现在我必须访问此队列的特定元素。 我有一个方法

public E takeElement(int j)
{
       //some code
}

我必须获取队列的j元素。我怎样才能做到这一点?? THX

2 个答案:

答案 0 :(得分:1)

你可以写:

E element = (E) queue.toArray()[j];

这可能会发出警告,但忽略这一点是安全的。

答案 1 :(得分:0)

试试这个

public E takeElement(int j) {
    for(int i = 0; i < j; i++) {
        E e = queue.poll();
        if (i == j - 1) {
            return e;
        }
    }
    return null;
}

或基于迭代器的版本:

public E takeElement(int j) {
    Iterator<E> it = queue.iterator();
    for(int i = 0; it.hasNext() && i < j; i++) {
        E e = it.next();
        if (i == j - 1) {
            return e;
        }
    }
    return null; 
}