Я использую Collections.synchronizedCollection в Java для защиты набора, к которому, как мне известно, обращаются одновременно многие потоки.Java API предупреждает:
"Обязательно, чтобы пользователь вручную синхронизировал возвращенную коллекцию при итерации по ней:
Collection c = Collections.synchronizedCollection(myCollection);
...
synchronized(c) {
Iterator i = c.iterator(); // Must be in the synchronized block
while (i.hasNext())
foo(i.next());
}
"
Если я использую c.contains(obj)
Это потокобезопасно?Внутренне, очевидно, это перебирает коллекцию и проверяет, равен ли какой-либо из объектов в ней объекту obj.Мой инстинкт состоит в том, чтобы предположить, что это, вероятно, синхронизировано (это может показаться серьезным сбоем, если нет), но, учитывая предыдущие проблемы с синхронизацией, представляется целесообразным перепроверить, и поиск в Google ответов на этот вопрос не обернулсячто угодно.