У меня есть коллекция, которая гарантированно будет видна всем потокам.Однако это не гарантирует видимость состояний элементов, которые хранятся в этой коллекции (например, если у меня есть коллекция StringBuilder (изменяемая, не потокобезопасная), то я должен синхронизировать каждый элемент в коллекции во время записи / чтения, верно?).Итак, что происходит, когда у меня есть коллекция объектов, которые используются для обеспечения самодостаточности (например, countdownlatch).Нужно ли как-то синхронизировать каждый элемент при вызове await / countDown?Код ниже примерно иллюстрирует эту дилемму:
public class SyncQuestion {
final List<CountDownLatch> lathces = new ArrayList<CountDownLatch>();
SyncQuestion() {
lathces.add(new CountDownLatch(1));
}
public static void main(String[] args) throws InterruptedException {
final SyncQuestion sync = new SyncQuestion();
final Thread sleepingThread = new Thread() {
public void run() {
for (CountDownLatch latch : sync.lathces) {
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
};
};
final Thread wakingThread = new Thread() {
public void run() {
for (CountDownLatch latch : sync.lathces) {
latch.countDown();
}
};
};
sleepingThread.start();
wakingThread.start();
sleepingThread.join();
wakingThread.join();
}
}
Пожалуйста, исправьте мои предположения, если они ошибочны.