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 synchronzed
penggunaan 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 #.