การหยุดชะงักเป็นข้อผิดพลาดในระดับระบบปฏิบัติการและเป็นตัวย่อของกระบวนการหยุดชะงักของกระบวนการ มันถูกเสนอครั้งแรกโดย Dijkstra เมื่อศึกษาอัลกอริทึมของนายธนาคารในปี 1965 มันเป็นหนึ่งในปัญหาที่ยากที่สุดในระบบปฏิบัติการคอมพิวเตอร์และแม้แต่สาขาการเขียนโปรแกรมพร้อมกันทั้งหมด
ในความเป็นจริงมีหลายสิ่งหลายอย่างในโลกคอมพิวเตอร์ที่จำเป็นต้องได้รับการแก้ไขด้วยหลายเธรดเนื่องจากด้วยวิธีนี้ทรัพยากรสามารถใช้เพื่อเพิ่มประสิทธิภาพของการคำนวณ อย่างไรก็ตามในความเป็นจริงมีหลายสถานการณ์ในระบบคอมพิวเตอร์ที่สามารถใช้ทรัพยากรได้ครั้งละหนึ่งกระบวนการเช่นเครื่องพิมพ์และกระบวนการเดียวเท่านั้นที่สามารถควบคุมได้ในเวลาเดียวกัน ในสภาพแวดล้อมการเขียนโปรแกรมหลายช่องทางหลายกระบวนการมักจะแบ่งปันทรัพยากรดังกล่าวและกระบวนการอาจต้องใช้ทรัพยากรมากกว่าหนึ่งทรัพยากร ดังนั้นกระบวนการหลายอย่างจะแข่งขันกันเพื่อหาทรัพยากรที่ จำกัด และคำสั่งของความก้าวหน้าจะไม่เหมาะสมจึงสร้างสถานการณ์ของการรอรอบไม่ จำกัด เราเรียกว่าการหยุดชะงักของรัฐนี้ เพื่อกล่าวอย่างง่ายๆการหยุดชะงักหมายถึงสถานการณ์ที่หลายกระบวนการวนผ่านทรัพยากรที่พวกเขาครอบครองและยังคงอยู่ในทางตันอย่างไม่มีกำหนด เห็นได้ชัดว่าหากไม่มีแรงภายนอกกระบวนการทั้งหมดที่เกี่ยวข้องกับการหยุดชะงักจะถูกบล็อกเสมอ
ชื่อไฟล์: DeadThreadByExtend.java
บันทึก:
1. เมื่อเริ่มต้นเธรดวิธีการเริ่มต้นสามารถใช้งานได้ วิธีการเรียกใช้สามารถเรียกได้ แต่มันก็เทียบเท่ากับการโทรปกติและดำเนินการในเธรดปัจจุบัน
2. การซิงโครไนซ์ไม่สามารถแก้ไขตัวแปรได้โดยตรง
3. บล็อกที่ซิงโครไนซ์ไม่ได้บังคับให้เข้าถึงตัวแปรแบบเธรดเดี่ยวในบล็อก มันหมายความว่าพารามิเตอร์ที่ซิงโครไนซ์ (ARGS) ถูกล็อคเมื่อดำเนินการคำสั่งภายในบล็อกและไม่ได้รับการปล่อยตัวจนกว่าการดำเนินการจะเสร็จสิ้น
แพ็คเกจ com.ycf.study.thread; แหล่งที่มาของคลาส {int a; void public seta (int x) {ซิงโครไนซ์ (นี่) {this.a = x; ลอง {thread.sleep (2000);} catch (interruptedExcept {แหล่งที่มา s1 = แหล่งใหม่ (); แหล่งที่มา s2 = แหล่งที่มาใหม่ (); คลาส mythread1 ขยาย java.lang.thread {@override โมฆะสาธารณะเรียกใช้ () {system.out.println ("เธรด 1 เริ่มต้น"); s1 "); s1.seta (20); system.out.println (" เธรด 1 ออกและปลดปล่อยล็อค ++++++++++++++++++++ ");}} คลาส mythread2 ขยาย java.lang.thread {@override public void run () {system.out.println ("เธรด 2 ใช้กับการแก้ไข S2"); s2.seta (20); System.out.println ("เธรด 2 เปลี่ยน S2 เสร็จสมบูรณ์"); system.out.println ("เธรด 2 ใช้กับการปรับเปลี่ยน S1"); S1.Seta (10); และปล่อยล็อค ++++++++++++++++++;}} mythread1 mt1 = ใหม่ mythread1 (); mythread2 mt2 = ใหม่ mythread2 (); mt1.start (); mt2.start ();}}}}}}}}}}}}}}สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับตัวอย่างรหัสการหยุดชะงักของกระทู้ Java ในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้