“สวัสดี อามีโก้!”

"ในบทเรียนก่อนหน้านี้ บางครั้งฉันใช้คำว่า 'mutex' และ 'monitor' ตอนนี้ถึงเวลาแล้วที่จะบอกคุณว่าพวกเขาหมายถึงอะไร"

"ฉันหูทั้งหมด"

" mutexเป็นวัตถุพิเศษสำหรับการซิงโครไนซ์เธรด/กระบวนการ มีสถานะที่เป็นไปได้สองสถานะ: ไม่ว่างและว่าง พูดง่ายๆ ก็คือ mutex เป็นตัวแปรบูลีนที่สามารถมีค่าได้สองค่า: ไม่ว่าง (จริง) และว่าง (เท็จ)"

"เมื่อเธรดต้องการเป็นเจ้าของออบเจกต์ จะทำเครื่องหมายว่า mutex ของออบเจ็กต์ไม่ว่าง และเมื่อเสร็จสิ้นการทำงานกับออบเจ็กต์ จะทำเครื่องหมาย mutex นั้นว่าง"

"อีกนัยหนึ่ง mutex ก็เหมือนป้าย 'ไม่ว่าง/ว่าง' ที่ประตู"

"ใช่ และ mutex ดังกล่าวเชื่อมโยงกับทุกออบเจกต์ใน Java เฉพาะเครื่อง Java เท่านั้นที่เข้าถึง mutex ได้โดยตรง มันถูกซ่อนจากโปรแกรมเมอร์"

“แล้วเราจะใช้มันอย่างไร”

"ใน Java เราสามารถทำงานกับ mutex ผ่านจอภาพได้"

"มอนิเตอร์เป็นกลไกพิเศษ (ชิ้นส่วนของโค้ด) ที่ซ้อนทับบน mutex รับประกันการโต้ตอบที่เหมาะสมกับ mutex ยังไม่เพียงพอที่จะทำเครื่องหมายวัตถุว่าไม่ว่าง ยังจำเป็นเพื่อให้แน่ใจว่าเธรดอื่นๆ จะไม่พยายาม ใช้วัตถุที่ยุ่ง"

"ใน Java มอนิเตอร์จะถูกนำไปใช้โดยใช้คีย์เวิร์ดซิงโครไนซ์"

"เมื่อคุณเขียนบล็อกซิงโครไนซ์ คอมไพเลอร์ Java จะแทนที่ด้วยโค้ดสามส่วน:"

1)ที่จุดเริ่มต้นของบล็อกที่ซิงโครไนซ์ จะมีการเพิ่มรหัสที่ระบุว่า mutex ไม่ว่าง

2)  ในตอนท้ายของบล็อกที่ซิงโครไนซ์ จะมีการเพิ่มรหัสที่ทำเครื่องหมายว่า mutex ว่าง

3)  ก่อนบล็อกซิงโครไนซ์ รหัสจะถูกเพิ่ม ซึ่งถ้า mutex ไม่ว่าง จะทำให้เธรดรอจนกว่า mutex จะถูกปล่อย

"นี่คือวิธีการทำงานโดยประมาณ:"

รหัส มันทำงานอย่างไร คำอธิบาย
synchronized(object)
{

object.doJob();

}
while (object.mutex)
Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;

เธรดจะเข้าสู่โหมดสลีปตราบเท่าที่ mutex ไม่ว่าง
(เราออกจากลูปเมื่อปล่อย mutex) ทำเครื่องหมาย mutex ว่าไม่ว่าง

ดำเนินการ doTask();

ทำเครื่องหมาย mutex ว่าฟรี

"ในความเป็นจริง ตรรกะของที่นั่นแตกต่างและซับซ้อนกว่านั้น แต่นี่เป็นเพียงรายละเอียดเท่านั้น"

"ขอทราบรายละเอียดได้ไหมครับ"

"จนกว่าคุณจะเรียนรู้วิธีใช้อย่างถูกต้อง ก็ไม่มีประโยชน์ที่จะต้องยุ่งเกี่ยวกับรายละเอียด"

"ย้อนไปสองสามระดับ ฉันได้ให้รายการสถานะของเธรดทั้งหมดที่มีลูกศรเปลี่ยนผ่านและรายการของวิธีการที่ส่งผลต่อสถานะนี้ คุณจำได้มากไหม"

“ไม่จริง ฉันแค่ลืมทุกอย่างอย่างรวดเร็ว…”

"ยิ่งคุณฝึกฝนน้อยเท่าไหร่คุณก็ยิ่งได้รับประโยชน์จากทฤษฎีน้อยลงเท่านั้น"

"เมื่อถึงเลเวล 40 คุณจะได้เรียนรู้วิธีใช้ทั้งหมดนี้ และฉันจะอธิบายว่าทั้งหมดนี้ใช้งานได้จริงอย่างไร ระหว่างนี้ ก็แค่เรียนรู้ที่จะใช้มันอย่างถูกต้อง เข้าใจไหม"

“ค่ะ ขอบคุณนะเอลลี่”