Seperti dijelaskan di jawaban lain, kode Anda tidak aman untuk Thread karena metode statis increment()mengunci Monitor kelas dan metode non-statis decrement()mengunci Monitor objek.
Untuk contoh kode ini, ada solusi yang lebih baik tanpa synchronzedpenggunaan kata kunci. Anda harus menggunakan AtomicInteger untuk mencapai keamanan Thread.
Benang aman menggunakan 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) itu akan menjadi thread aman. Atau jika Anda menggunakan beberapa objek pengunci. Seperti yang saya katakan, saya tidak tahu tentang Java - komentar saya berasal dari pengetahuan C #.