ถ้าฉันมีวิธีการซิงโครไนส์ 2 วิธีในคลาสเดียวกัน แต่แต่ละวิธีเข้าถึงตัวแปรที่แตกต่างกัน 2 เธรดสามารถเข้าถึง 2 วิธีเหล่านั้นในเวลาเดียวกันได้หรือไม่ ล็อคเกิดขึ้นกับวัตถุหรือมีความเฉพาะเจาะจงกับตัวแปรภายในวิธีการซิงโครไนซ์หรือไม่?
ตัวอย่าง:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
2 เธรดสามารถเข้าถึงอินสแตนซ์เดียวกันของคลาส X ที่มีประสิทธิภาพx.addA(
) และx.addB()
ในเวลาเดียวกันได้หรือไม่
synchronized (this)
บล็อกอยู่รอบตัวของวิธีการ วัตถุ "นี้" ไม่ได้ล็อค แต่จะใช้วัตถุ "this" เป็น mutex และเนื้อความถูกป้องกันไม่ให้ทำงานพร้อมกันกับส่วนรหัสอื่น ๆ ที่ซิงโครไนซ์กับ "this" ไม่มีผลกับฟิลด์ / วิธีอื่นของ "this" ที่ไม่ได้ซิงโครไนซ์