Как объясняется в других ответах, ваш код не является потокобезопасным, поскольку статический метод increment()
блокирует монитор классов, а нестатический метод decrement()
блокирует монитор объектов.
Для этого примера кода существует лучшее решение без synchronzed
использования ключевых слов. Вы должны использовать AtomicInteger для обеспечения безопасности потоков.
Потокобезопасное использование AtomicInteger
:
import java.util.concurrent.atomic.AtomicInteger;
class ThreadSafeClass extends Thread {
private static AtomicInteger count = new AtomicInteger(0);
public static void increment() {
count.incrementAndGet();
}
public static void decrement() {
count.decrementAndGet();
}
public static int value() {
return count.get();
}
}
increment
), он будет потокобезопасным. Или если вы использовали какой-то блокирующий объект. Как я уже сказал, я не знаю о Java - мой комментарий основан на знании C #.