คำอธิบายโดยละเอียดของเธรด Java และความแตกต่างระหว่างเธรดและกระบวนการ
1. กระบวนการและเธรด
แต่ละกระบวนการมีพื้นที่หน่วยความจำที่ไม่ซ้ำกันและแอปพลิเคชันสามารถเริ่มกระบวนการหลายกระบวนการในเวลาเดียวกัน ตัวอย่างเช่นในเบราว์เซอร์ IE การเปิดเบราว์เซอร์ IE เทียบเท่ากับการเริ่มต้นกระบวนการ
เธรดหมายถึงกระบวนการดำเนินการในกระบวนการและกระบวนการสามารถมีหลายเธรด
แต่ละกระบวนการต้องการระบบปฏิบัติการเพื่อจัดสรรพื้นที่หน่วยความจำอิสระให้กับมันและหลายเธรดในกระบวนการเดียวกันแบ่งปันพื้นที่นี้นั่นคือหน่วยความจำที่ใช้ร่วมกันและทรัพยากรอื่น ๆ
ทุกครั้งที่ Java.exe ถูกเรียกระบบปฏิบัติการจะเริ่มกระบวนการเสมือนจริงของ Java เมื่อกระบวนการเครื่องเสมือน Java เริ่มต้นขึ้นเครื่องเสมือน Java จะสร้างเธรดหลักซึ่งจะเริ่มดำเนินการจากวิธีการเข้าโปรแกรมหลักของโปรแกรม
ทุกครั้งที่เครื่องเสมือน Java เริ่มต้นเธรดมันจะกำหนดเมธอดเธรดให้กับเธรดเพื่อจัดเก็บข้อมูลที่เกี่ยวข้อง (เช่นตัวแปรท้องถิ่น ฯลฯ ) และเธรดจะทำงานบนสแต็กนี้ ดังนั้นตัวแปรท้องถิ่นในวัตถุ Java จึงเป็นแบบเธรดที่ปลอดภัย แต่ตัวแปรอินสแตนซ์และตัวแปรคลาสจะไม่ถูกเก็บไว้ในสแต็กดังนั้นจึงไม่ปลอดภัยกับเธรด
มีสามสถานะของกระบวนการ: พร้อมการดำเนินการและการปิดกั้น
2. วิธีการสร้างเธรด
วิธีการเรียกใช้: (วิธีนี้มีความยืดหยุ่นแนะนำ)
คลาสสาธารณะ Thread02 ใช้งาน runnable {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {runnable r = new <strong> thread02 </strong> (); เธรด t1 = เธรดใหม่ (<strong> r </strong>, "T1"); /*** ซอร์สโค้ดเธรด* เธรดสาธารณะ (เป้าหมายที่เรียกใช้, ชื่อสตริง) {init (null, เป้าหมาย, ชื่อ, 0); } */ เธรด t2 = เธรดใหม่ (r, "t2"); t1.start (); // เริ่มเธรด T1 ในสถานะพร้อมรอ CPU T2.start (); // เริ่มเธรด T2 ในสถานะพร้อมรอ CPU T1.Run (); // เธรดหลักการเรียกใช้วิธีการเรียกใช้ของวัตถุ t1} โมฆะสาธารณะ run () {system.out.println ("ชื่อเธรดคือ" + thread.currentthread (). getName ()); -ผลลัพธ์ของการดำเนินการอาจเป็น:
ชื่อเธรดคือชื่อของ T1Thread คือชื่อของ MainThread คือ T2
ทางหัว
ชั้นเรียนสาธารณะ Thread03 ขยายเธรด {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {thread03 t1 = ใหม่ <strong> Thread03 </strong> (); // เขียนเป็นเธรด t1 = เธรดใหม่ () หมายเหตุ: Thread03 เป็นเธรดในเวลานี้ t1.start (); } โมฆะสาธารณะเรียกใช้ () {system.out.println ("ชื่อเธรดคือ" + thread.currentthread (). getName ()); -ผลการรัน: ชื่อเธรดคือเธรด -0
หมายเหตุ: นอกเหนือจากเธรดที่กำหนดเองแล้วยังมีเธรดหลักทุกครั้งที่โปรแกรมทำงาน
ครอบคลุม:
ชั้นเรียนสาธารณะ Thread01 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เธรดเธรด = ใหม่เธรด (); thread.start (); // สิ่งที่ใช้งานได้จริงคือ Run ()/** และเรียกใช้ในเธรด* public void run () {if (target! = null) {target.run (); }} ดังนั้นเธรดที่คุณสร้างขึ้นเองจำเป็นต้องเขียนวิธีการเรียกใช้ใหม่และนำเนื้อหาที่จะดำเนินการในการเรียกใช้ () ดังนั้นคุณต้องใช้อินเทอร์เฟซหรือการสืบทอดจากนั้นสร้างคลาสย่อย*// วิธีการสร้างเธรด 1 เมธอด subclass (InterruptedException E) {E.PrintStackTrace (); } //thread.currentthread () รับเธรดปัจจุบัน System.out.println ("ชื่อเธรด 1 คือ"+เธรด currentthread (). getName ()); }}}}; // thread1.start (); // ไม่สามารถเริ่มต้นได้โดยไม่ต้องเขียนเธรด // วิธีการสร้างเธรด 2 วิธีการเรียกใช้ (การใช้งาน) ขอแนะนำให้ใช้เธรดเธรด 2 = เธรดใหม่ (ใหม่ runnable () {โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ลอง {thread.sleep (300);} catch (interruptedexception e) "+thread.currentthread (). getName ());}}}); // thread2.start (); // ดำเนินการเธรดเธรดใหม่ (ใหม่ runnable () {public void run () {system.out.println ("runnable"+thread.currentthread (). getName ());}}) {public void run () {// วิธีการเรียกใช้ใน subclass "+thread.currentthread (). getName ()); } }.เริ่ม(); } /****การดำเนินการมัลติเธรดในซีพียูเดียวมีแนวโน้มที่จะลดประสิทธิภาพการดำเนินการแทนที่จะปรับปรุงหนึ่งคนที่ทำสิ่งเดียวกันในสถานที่ต่าง ๆ* /}ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!