Да и № Threas-сейф только нечетко определяется как как только вы расширите сферу действия.
Как правило, параллельные коллекции реализуют все свои методы способами, позволяющими параллельный доступ несколькими потоками или, если они не могут, обеспечить механизмы для последовательного сериализации таких доступов (например, синхронизации) прозрачно. Таким образом, они безопасны в том смысле, что они обеспечивают сохранение правильной внутренней структуры, а вызовы методов дают достоверные результаты.
Нечеткость начинается, если вы посмотрите на детали, например. toArray() вернет вам какой-то моментальный снимок содержимого коллекций. Нет гарантии, что к моменту возвращения метода содержимое не будет уже изменено. Таким образом, пока вызов является потокобезопасным, результат будет не выполнить обычные инварианты (например, содержимое массива может не быть таким же, как коллекции).
Если вам нужна согласованность в области вызовов mupltiple для параллельного сбора, вам необходимо предоставить механизмы в коде, вызывающем методы для обеспечения требуемой согласованности.
Возможно, эта статья может быть интересна для вас: http://crunchify.com/hashmap-vs-concurrenthashmap-vs-synchronizedmap-how-a-hashmap-can-be-synchronized-in-java/ – thoeni
Обратите внимание, что cast в 'String []' также неверно. – user2357112