Абсолютно - в конце концов, он обращается к общему ресурсу, возможно, через множество потоков. Лично я бы вместо этого просто использовал AtomicInteger
.
public class MyClass {
private static final AtomicInteger count = new AtomicInteger();
public MyClass() {
count.incrementAndGet();
}
}
Обратите внимание, что теперь мы можем сделать переменную final, так как переменная не меняет значение, и нам больше не нужно синхронизировать все элементы классов в java. util.concurrent.atomic заключается в том, что они могут использоваться атомарно без дополнительной синхронизации.
Даже если вы находитесь в в ситуации, когда вам нужно синхронизировать, я бы не использовал MyClass.class
для этого - это ссылка, по которой другой код может решить синхронизироваться, поэтому вы можете ' Я больше не думаю о вашем коде. Я бы написал (опять же, только если по какой-то причине AtomicInteger
недостаточно хорош):
public class MyClass {
private static final Object countLock = new Object();
private static int count = 0;
public MyClass() {
synchronized(countLock) {
count++;
}
...
}
}
(В этом случае вы также хотите синхронизироваться на countLock
везде, где у вас есть доступ к count
, даже только для чтения.)