ตามที่อธิบายไว้ในคำตอบอื่น ๆ รหัสของคุณไม่ปลอดภัยต่อเธรดเนื่องจากวิธีการแบบคงที่จะ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 #