Блок
A synchronized
использует блокировку объекта, на который он ссылается, в вашем случае ProgressBar.class
.Если никакой другой поток не владеет блокировкой, блок synchronized
получает ее и продолжает работу.Если блокировка уже принадлежит другому потоку, блок synchronized
переходит в спящий режим в ожидании снятия блокировки, после чего он пытается снова.Как только поток, которому принадлежит блокировка, завершает работу с блоком synchronized
, он снимает блокировку, в результате чего хотя бы один из потоков, ожидающих блокировку, попытается получить ее.
(Это объяснение пропускаетвероятность того, что один и тот же поток может получить блокировку несколько раз, прежде чем снимать ее. Если поток владеет блокировкой хотя бы один раз, все другие потоки блокируются для ее получения.)
См. JavaСпецификация языка .