ฉันรู้ว่าการใช้synchronize
คีย์เวิร์ดก่อนที่เมธอดจะนำการซิงโครไนซ์ไปยังวัตถุนั้น นั่นคือ 2 เธรดที่รันอินสแตนซ์เดียวกันของออบเจ็กต์จะซิงโครไนซ์
อย่างไรก็ตามเนื่องจากการซิงโครไนซ์อยู่ที่ระดับอ็อบเจ็กต์ 2 เธรดที่รันอินสแตนซ์ที่แตกต่างกันของอ็อบเจ็กต์จะไม่ซิงโครไนซ์ หากเรามีตัวแปรคงที่ในคลาส Java ที่ถูกเรียกโดยวิธีการเราต้องการให้มันถูกซิงโครไนซ์ข้ามอินสแตนซ์ของคลาส อินสแตนซ์ทั้งสองกำลังทำงานใน 2 เธรดที่แตกต่างกัน
เราสามารถทำการซิงโครไนซ์ด้วยวิธีต่อไปนี้ได้หรือไม่?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
เป็นความจริงหรือไม่ว่าเนื่องจากเราได้กำหนดวัตถุlock
ที่เป็นแบบคงที่และเรากำลังใช้คีย์เวิร์ดsynchronized
สำหรับการล็อกcount
นั้นตอนนี้ตัวแปรคงถูกซิงโครไนซ์ข้ามอินสแตนซ์ของคลาสแล้วTest
?