ใช่มันจะ (บนบล็อก / ฟังก์ชันที่ซิงโครไนซ์ใด ๆ )
ฉันสงสัยเกี่ยวกับคำถามนี้มาสองสามวันแล้วสำหรับตัวเอง (จริงๆแล้วใน kotlin) ในที่สุดฉันก็พบคำอธิบายที่ดีและต้องการแบ่งปัน:
การล็อกระดับคลาสป้องกันไม่ให้เธรดจำนวนมากเข้าสู่บล็อกที่ซิงโครไนซ์ในอินสแตนซ์ที่มีอยู่ทั้งหมดของคลาสบนรันไทม์ ซึ่งหมายความว่าหากในรันไทม์มี DemoClass 100 อินสแตนซ์จะมีเพียงเธรดเดียวเท่านั้นที่สามารถรัน demoMethod () ในอินสแตนซ์ใดอินสแตนซ์ใดก็ได้ในแต่ละครั้งและอินสแตนซ์อื่น ๆ ทั้งหมดจะถูกล็อกสำหรับเธรดอื่น
ควรทำการล็อกระดับคลาสเพื่อให้เธรดข้อมูลคงที่ปลอดภัย ดังที่เราทราบว่าคำสำคัญแบบคงที่เชื่อมโยงข้อมูลของวิธีการกับระดับชั้นเรียนดังนั้นให้ใช้การล็อกที่เขตข้อมูลคงที่หรือวิธีการเพื่อให้อยู่ในระดับชั้นเรียน
นอกจากนี้ยังสังเกตเห็นว่าทำไม. class . เป็นเพียงเพราะ.class
เทียบเท่ากับตัวแปรคงที่ของคลาสที่คล้ายกับ:
private final static Object lock = new Object();
โดยที่ชื่อตัวแปรล็อคคือคลาสและประเภทคือคลาส <T>
อ่านเพิ่มเติม:
https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/