Мне интересно, можно ли использовать AtomicReferenceArray в качестве замены для ConcurrentLinkedQueue (если бы можно было жить с ограниченной структурой).
У меня сейчас есть что-то вроде:
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, но все еще не совсем уверен.
Приветствия