java.util. ConcurrentLinkedQueue

http://php.net/manual/en/function.array-reverse.php :

$newArray = array_reverse($theArray, true);

Важной частью является параметр true который сохраняет ключи.

Не убежден? Вы можете увидеть это в действии на этой процедуре кодирования .

16
задан ashitaka 12 January 2009 в 10:46
поделиться

4 ответа

Вы по существу задаете три различных вопроса (два из них явно и один неявно.) Здесь они с моими ответами:

1. Я должен сделать свою собственную синхронизацию, если я использую java.util.ConcurrentLinkedQueue?

Атомарные операции на параллельных наборах синхронизируются для Вас. Другими словами, каждый отдельный вызов очереди гарантируется ориентированный на многопотоковое исполнение без любого действия с Вашей стороны. То, что не , гарантировало ориентированный на многопотоковое исполнение, любые операции, которые Вы выполняете на наборе, которые являются неатомарными.

, Например, это ориентировано на многопотоковое исполнение без любого действия с Вашей стороны:

queue.add(obj);

или

queue.poll(obj);

Однако; неатомарные вызовы очереди не автоматически ориентированы на многопотоковое исполнение. Например, следующие операции не автоматически ориентированы на многопотоковое исполнение:

if(!queue.isEmpty()) {
   queue.poll(obj);
}

, Что последний не ориентирован на многопотоковое исполнение, поскольку очень возможно, что между временем isEmpty назван и опрос времени называют, другие потоки добавят или удалят объекты из очереди. Ориентированный на многопотоковое исполнение способ выполнить это похож на это:

synchronized(queue) {
    if(!queue.isEmpty()) {
       queue.poll(obj);
    }
}

Снова... атомарные вызовы очереди автоматически ориентированы на многопотоковое исполнение. Неатомарные вызовы не.

2. Я, как гарантируют, не потеряю вызовы java.util.ConcurrentLinkedQueue, если будет 1 000 одновременных запросов?

, поскольку это - неограниченная реализация, Вам гарантируют это, неважно, сколько одновременных запросов для создания очередь не потеряет те запросы (из-за параллелизма очереди... у Вас могла бы закончиться память или некоторые такой..., но сама реализация очереди не будут Вашим ограничивающим фактором.) В веб-приложении, существуют другие возможности "потерять" запросы, но синхронизация (или отсутствие этого) очереди не будет Вашей причиной.

3. Эти java.util.ConcurrentLinkedQueue будет работать достаточно хорошо?

Как правило, мы говорим о "правильности", когда мы говорим о параллелизме. То, что я имею в виду, то, что Параллельные классы гарантируют, что они ориентированы на многопотоковое исполнение (или устойчивы против мертвой блокировки, исчерпания ресурсов, и т.д.), Когда мы говорим об этом, мы не делаем гарантий о производительности (как быстро звонит в набор) - мы только гарантируем, что они "корректны".

Однако; ConcurrentLinkedQueue является реализацией "без ожидания", таким образом, это, вероятно, столь производительно, как можно добраться. Единственный способ гарантировать производительность загрузки Вашего сервлета (включая использование параллельных классов) состоит в том, чтобы протестировать его при загрузке.

57
ответ дан 30 November 2019 в 15:18
поделиться

Помните, что очередь только ориентирована на многопотоковое исполнение для вызовов единственному участнику. Не пишите код как это и ожидайте, что он будет работать:

if (queue.Count!=0)
    queue.Dequeue().DoSomething();

Промежуточный эти две операции, другой поток, возможно, исключил последний элемент из очереди. Я не являюсь близким с наборами Java, но я предполагаю, что Двухсторонняя очередь в таком случае возвратилась бы null, дав Вам исключение.

3
ответ дан 30 November 2019 в 15:18
поделиться
  1. , Так как очередь ориентирована на многопотоковое исполнение, Вы не должны выполнять синхронизации для обеспечения потокобезопасности. Однако необходимо удостовериться, чтобы все потоки имели равный доступ к очереди для предотвращения исчерпания ресурсов, активного ожидания, и т.д.

  2. , Так как очередь неограниченна, размер очереди ограничен только объемом памяти, который Вы имеете в наличии.

1
ответ дан 30 November 2019 в 15:18
поделиться

Да, для Ваших двух вопросов.

параллельная очередь ориентирована на многопотоковое исполнение (и эффективно из-за алгоритма без блоков, используемого внизу). Ориентированный на многопотоковое исполнение подразумевает , что количество параллельных доступов не должно иметь любое значение (я еще не услышал о состоянии состязания, которое, как гарантируют, не произойдет ниже xyz параллельных доступов).

Кроме того - оптимальная производительность в многопоточных приложениях более сложна, чем это. Но использование реального параллельного набора не является слишком плохим запуском.

0
ответ дан 30 November 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: