Итак, почему вы спрашиваете? :) Вы действительно верите, что если класс помещен в пакет java.util, тогда происходит какое-то волшебство, и его java-код работает каким-то хитрым образом?
Это действительно просто оборачивает все методы синхронизированным блоком {} и ничего более.
UPD: разница в том, что у вас гораздо меньше шансов ошибиться, если вы используете синхронизированный сбор вместо того, чтобы выполнять все операции синхронизации самостоятельно.
UPD 2: как вы можете видеть из источников, они используют объект mutex в качестве монитора. Когда вы используете синхронизированный модификатор в сигнатуре метода (т.е. synchronized void doSmth()
), текущий экземпляр вашего объекта (т.е. this
) используется в качестве монитора. Два блока кода ниже одинаковы:
1
synchronized public void doSmth () {
someLogic ();
moreLogic ();
}
synchronized public static void doSmthStatic () {
someStaticLogic ();
moreStaticLogic ();
}
2
public void doSmth () {
synchronized (this) {
someLogic ();
moreLogic ();
}
}
public static void doSmthStatic () {
synchronized (ClassName.class) {
someStaticLogic ();
moreStaticLogic ();
}
}