Какие коллекции Java синхронизированы (потокобезопасны), а какие нет?

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

А второй дефект - то, что _resetEvent.Set() никогда не будет называться, если рабочий поток выдаст исключение - отъезд основного потока, ожидающего неограниченно долго - однако, этот дефект мог легко быть зафиксирован с блоком попытки/наконец.

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

Другой метод (принимающий Вас имеют максимум одного немодального открытого окна) должен установить ActiveForm. Включенный = ложь, затем цикл на Приложении, DoEvents, пока второстепенный рабочий не закончил отменять, после которого можно установить ActiveForm. Включенный = верный снова.

18
задан Mr.Q 16 February 2019 в 11:02
поделиться

1 ответ

Есть три группы коллекций.

  • Java 1.0 коллекции, которые в основном унаследованные классы. Это включает в себя Hashtable, Vector, Stack. Они синхронизированы, но я не рекомендую их использовать. Свойства, пожалуй, одно исключение, но я бы не стал использовать его в многопоточном контексте.
  • Коллекции Java 1.2, добавленные в 1998 году, которые в значительной степени заменили эти коллекции, не синхронизируются, но могут быть синхронизированы с использованием Collections.synchronizedXxx() методов
  • Коллекции параллелизма Java 5.0, добавленные в 2004 году, поддерживают коллекции без блокировок, безопасные для потоков.

Короче говоря, ни одна из коллекций, которые я бы порекомендовал вам использовать, не синхронизирована.

10
ответ дан 30 November 2019 в 07:38
поделиться
Другие вопросы по тегам:

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