我想知道AtomicReferenceArray是否可以用作ConcurrentLinkedQueue的替代品(如果有人可以使用有界结构)。AtomicReferenceArray的工作原理
目前,我有这样的:
ConcurrentLinkedQueue<Object[]> queue = new ConcurrentLinkedQueue<Object[]>();
public void store(Price price, Instrument instrument, Object[] formats){
Object[] elements = {price, instrument, formats};
queue.offer(elements);
}
商店(..)是由多个线程调用。
我也有一个消费者线程,它定期唤醒并消耗这些元素。
private class Consumer implements Runnable{
@Override
public void run(){
List<Object[]> holder = drain(queue);
for(Object[] elements : holder){
for(Object e : elements){
//process ...
}
}
private final List<Object[]> drain(){
//...
}
}
我可以用ConcurrentLinkedQueue替换AtomicReferenceArray并仍然保持线程安全性方面吗?
具体来说,原子地存储元素并建立“之前发生”关系,以便消费者线程看到不同线程存储的所有元素?
我尝试阅读AtomicReferenceArray的源代码,但仍然不能确定。
干杯
你在'ConcurrentLinkedQueue'中得到了'store'方法吗? – 2012-02-05 18:39:41
抱歉,您想通过此开关获得什么? – 2012-02-05 18:44:10
@pavelrappo对不起,应该是“offer”。我没有在这里复制我的实际代码,而是死记录它的一小部分。 – CaptainHastings 2012-02-06 01:54:38