Есть несколько терминов, касающихся темы, о которой вы спрашиваете.
Синхронизация
Существует ряд интерфейсов и классов, которые помогают синхронизировать ваш код между потоками.A Семафор , CyclicBarrier или синхронные коллекции, такие как BlockingQueue .Список этих классов см. В пакете java.util.concurrent .
Блок synchronized
также является способом синхронизации, хотя для правильного использования требуется большеопыт работы.
Mutex
Различные языки (и библиотеки) по-разному реализуют стандартный мьютекс.Идея остается прежней - чтобы приступить к выполнению определенного кода, токена MUTually EXclusive, необходимо получить мьютекс.В Java это приобретение происходит перед входом в блок synchronized
.
Потоковая безопасность
Проще говоря, класс является поточно-ориентированным, когда все его методы могут быть доступны в любом порядке из любого числа потоков одновременно.Существует несколько способов обеспечения безопасности потоков.Например, строки являются потокобезопасными.Они не синхронизированы, но они неизменны, что также обеспечивает безопасность потоков.Все Collections.synchronized*()
методы возвращают потокобезопасные оболочки для коллекций, за исключением того, что весь будущий * (* см. случай-до ) доступ к ним выполняется через эти оболочки (поэтому для новичков это хорошее правило вызыватьCollections.synchronized*()
на new
объекты только.
Ответ
Имея знания из предыдущих абзацев, чтобы ответить на ваш вопрос: нет, он не синхронизирует класс. Он не изменяетсявообще оригинальная реализация Collection
. Тем не менее она создает потокобезопасный синхронизированный изменяемый вид прокси для чтения и записи для этого класса.