ก่อนอื่นให้ดูที่สถานะการทำงานของแต่ละขั้นตอนของเธรด Java ที่กำลังทำงานอยู่
เธรดเป็นเอนทิตีในกระบวนการและเป็นหน่วยพื้นฐานที่กำหนดอย่างอิสระและจัดส่งโดยระบบ ดำเนินการกับเธรดอื่น ๆ ที่เป็นของกระบวนการเดียวกัน หนึ่งเธรดสามารถสร้างและเลิกทำเธรดอื่นและหลายเธรดในกระบวนการเดียวกันสามารถดำเนินการพร้อมกันได้ เนื่องจากข้อ จำกัด ร่วมกันระหว่างเธรดเธรดจะปรากฏเป็นระยะ ๆ ในระหว่างการทำงาน
ในระบบปฏิบัติการที่แนะนำเธรดกระบวนการมักจะใช้เป็นหน่วยพื้นฐานสำหรับการจัดสรรทรัพยากรและเธรดจะใช้เป็นหน่วยพื้นฐานสำหรับการทำงานอิสระและการกำหนดเวลาอิสระ เนื่องจากเธรดมีขนาดเล็กกว่ากระบวนการและโดยทั่วไปไม่ใช่ทรัพยากรระบบค่าใช้จ่ายของการจัดตารางเวลาจะมีขนาดเล็กลงมากซึ่งสามารถปรับปรุงระดับของการดำเนินการพร้อมกันระหว่างโปรแกรมหลายโปรแกรมในระบบได้อย่างมีประสิทธิภาพมากขึ้น
เธรดเป็นกระบวนการควบคุมแบบต่อเนื่องเดียวในโปรแกรม การรันหลายเธรดพร้อมกันในโปรแกรมเดียวเพื่อทำงานที่แตกต่างกันให้เสร็จสมบูรณ์เรียกว่า MultithReading
มัลติเธรดส่วนใหญ่ใช้เพื่อประหยัดเวลา CPU และใช้ประโยชน์
มัลติเธรดคือการทำงานให้เสร็จสมบูรณ์หลายงานพร้อมกันเพื่อไม่ปรับปรุงประสิทธิภาพการปฏิบัติงาน แต่เพื่อปรับปรุงประสิทธิภาพการใช้ทรัพยากรเพื่อปรับปรุงประสิทธิภาพของระบบ เธรดจะถูกนำไปใช้เมื่อต้องเสร็จสิ้นงานหลายงานในเวลาเดียวกัน
มีสองวิธีในการใช้มัลติเธรดใน Java
1. สืบทอดคลาสเธรด
2. ใช้อินเทอร์เฟซ Runnable
อะไรคือจุดทั่วไปของสองวิธีนี้:
ไม่ว่าจะใช้วิธีใดคุณต้องใช้เธรด (ถ้าเป็นคลาสย่อยของเธรดให้ใช้มันเอง) เพื่อสร้างเธรดจากนั้นเรียกใช้วิธีการเริ่มต้น ()
ความแตกต่างระหว่างสองวิธี:
1. ข้อเสียอย่างหนึ่งของการสืบทอดคลาสเธรดคือการสืบทอดเดี่ยวในขณะที่การใช้อินเทอร์เฟซที่ทำงานได้นั้นประกอบไปด้วยข้อบกพร่องและสามารถสืบทอดได้หลายครั้ง
2. หากคุณสืบทอดคลาสเธรดถ้าคุณสร้างวัตถุอินสแตนซ์ที่เรียกใช้งานได้คุณต้องสร้างวัตถุอินสแตนซ์ที่รันได้หลายรายการแล้วใช้เธรดเพื่อสร้างหลายเธรด คลาสนี้แล้วใช้อินสแตนซ์นี้ นั่นคือการแบ่งปันทรัพยากร
ขึ้นอยู่กับสองจุดข้างต้นขอแนะนำให้ใช้วิธีที่สอง
ต่อไปนี้เป็นตัวอย่างที่จะแสดง
โปรแกรม 1:
แพ็คเกจ com.dr.runnable1; // คลาสสืบทอดคลาสเธรดจากนั้นคลาสนี้เป็นคลาสมัลติเธรด /หากจะใช้มัลติเธรดคุณต้องมีร่างกายของวิธีการเรียกใช้โมฆะสาธารณะวิธีการเรียกใช้ () {// printout สำหรับ (int i = 0; i <10; i ++) {system.out.println (this.name+"--- -> run ,,,, ");}}} คลาสสาธารณะ demo1 {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// วิธีแรก runnable r1 = ใหม่ mythread (" เธรด A "); runnable r2 = ใหม่ Mythread ("เธรด B"); ); t2.start (); วิธี // mythread mt1 = new mythread ("เธรด a"); // mythread mt2 = new mythread ("เธรด b"); // mythread mt3 = ใหม่ mythread ("เธรด c"); // mt1.start () ; // mt1.start (); // เธรดสามารถเริ่มต้นได้เพียงครั้งเดียวเท่านั้น // mt2.start (); // mt3.start ();}}ผลการทำงานของโปรแกรมคือ:
นี่คือการสืบทอดคลาสเธรดวิธีแรกสร้างวัตถุอินสแตนซ์ที่เรียกใช้หลายรายการแล้วใช้เธรดเพื่อสร้างหลายเธรด
วิธีที่สองคือเนื่องจากคลาสนี้ได้รับมรดกคลาสเธรดจึงสามารถใช้โดยตรงเพื่อสร้างหลายเธรด
โปรแกรม 2:
แพ็คเกจ com.dr.runnable1; Class MyThread1 ใช้งาน Runnable {ตั๋ว INT ส่วนตัว = 10; ออก. println ("ตั๋ว ----->"+(this.ticket--));}}}} demo2 ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง args []) {mythread1 mt = ใหม่ mythread1 (); ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::::::::: กระทานที่ Thread T1 = เธรดใหม่ (MT); (MT);โปรแกรมการรันผลลัพธ์:
โปรแกรมนี้ใช้งาน Runnable สร้างคลาสของวัตถุอินสแตนซ์จากนั้นใช้เธรดเพื่อสร้างหลายเธรด