มัลติเธรดใน Java – เรียนรู้ด้วยตัวอย่าง
เผยแพร่แล้ว: 2022-06-23Java เป็นภาษาโปรแกรมที่สนับสนุนโปรแกรมแบบมัลติเธรด โปรแกรมแบบมัลติเธรดรองรับสองส่วนหรือมากกว่า (เธรด) ที่ทำงานพร้อมกัน จัดการงานต่างๆ ซึ่งช่วยให้ใช้งาน CPU ได้อย่างเหมาะสมที่สุด Multi-threading เป็นส่วนขยายของการทำงานหลายอย่าง การมอบหมายงานหลายงานสามารถกำหนดเป็นคุณลักษณะที่กระบวนการหลายรายการใช้ทรัพยากรการประมวลผลร่วมกัน เช่น หน่วยประมวลผลกลาง
มัลติเธรดแยกแนวคิดของการทำงานหลายอย่างพร้อมกันไปยังแอปพลิเคชันต่างๆ ซึ่งการดำเนินการที่กำหนดสามารถแบ่งออกเป็นเธรดเดี่ยวๆ ที่เล็กกว่าได้
แต่ละเธรดเหล่านี้ทำงานพร้อมกันและแยกจากกันด้วยเส้นทางการดำเนินการที่แตกต่างกัน ดังนั้นข้อยกเว้นในเธรดหนึ่งจะไม่ส่งผลต่อประสิทธิภาพของเธรดอื่น
เรียนรู้หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
มัลติเธรดใน Java คืออะไร?
มัลติเธรดใน Java เป็นที่ที่หลายเธรดถูกดำเนินการพร้อมกันเพื่อเพิ่มเวลา CPU ให้สูงสุด
วงจรชีวิตของเธรด
เธรดมีขั้นตอนต่าง ๆ ในวงจรชีวิต พวกเขามีดังนี้:

- ใหม่: เธรดเริ่มต้นวงจรชีวิตเป็นเธรดใหม่ มันยังคงอยู่ในระยะแรกเกิดนี้จนกว่าโปรแกรมจะรันเธรด
- Runnable: เธรดที่เกิดจะเข้าสู่ระยะ runnable เมื่อโปรแกรมเริ่มทำงาน เธรดเริ่มทำงานในขั้นตอนนี้
- กำลังรอ: นี่คือขั้นตอนการเปลี่ยนแปลงที่เธรดรอให้เธรดอื่นทำงานให้เสร็จสิ้น เธรดในสเตจที่รอจะเปลี่ยนเป็นสเตจที่รันได้หลังจากรับสัญญาณจากเธรดอื่น
- หมดเวลารอ: นี่คือสเตจที่เธรดที่รันได้สามารถป้อนในช่วงเวลาที่กำหนด เธรดในสเตจนี้จะย้ายกลับไปยังสเตจที่รันได้เมื่อสิ้นสุดช่วงเวลาที่ระบุ
- Dead: นี่เป็นขั้นตอนสุดท้ายในวงจรชีวิตของเธรด เธรดเข้าสู่ขั้นตอนนี้หลังจากเสร็จสิ้นภารกิจ
ประโยชน์ของมัลติเธรดใน Java
- เนื่องจากเธรดใน Java มีความเป็นอิสระ Java multithreading จึงไม่บล็อกผู้ใช้ และสามารถดำเนินการหลายอย่างพร้อมกันได้
- เนื่องจากมัลติเธรดใน Java ช่วยให้สามารถดำเนินการได้หลายอย่าง จึงช่วยประหยัดเวลาและมีประสิทธิภาพ
- โปรแกรมสามารถทำงานอย่างต่อเนื่องแม้ว่าส่วนหนึ่งของโปรแกรมจะถูกสกัดกั้น
- ปรับปรุงประสิทธิภาพเมื่อเทียบกับโปรแกรมคู่ขนานทั่วไปที่ใช้หลายกระบวนการ
- การสร้างโปรแกรมที่มีประสิทธิภาพซึ่งใช้เวลาของ CPU อย่างเต็มที่
- ปรับปรุงเวลาตอบสนองของแอปพลิเคชันที่ซับซ้อนอย่างมาก
- ต้องการทรัพยากรน้อยกว่าเมื่อเทียบกับโปรแกรมคู่ขนานแบบดั้งเดิม
ลำดับความสำคัญของเธรด
ระบบปฏิบัติการจะกำหนดตารางเวลาการดำเนินการของเธรดตามลำดับความสำคัญของเธรด ลำดับความสำคัญของเธรดถูกกำหนดตามค่าคงที่ของเธรด
- ค่าคงที่ 1 ได้รับลำดับความสำคัญขั้นต่ำ ( MIN_PRIORITY)
- ค่าคงที่ 5 ได้รับลำดับความสำคัญปกติ ( NORM_PRIORITY)
- ค่าคงที่ 10 ได้รับลำดับความสำคัญสูงสุด (MAX_PRIORITY)
หลักสูตรและบทความยอดนิยมเกี่ยวกับวิศวกรรมซอฟต์แวร์
โปรแกรมยอดนิยม | |||
หลักสูตร Executive PG ในการพัฒนาซอฟต์แวร์ - IIIT B | โปรแกรมใบรับรองบล็อคเชน - PURDUE | โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ - PURDUE | MSC ในวิทยาการคอมพิวเตอร์ - IIIT B |
บทความยอดนิยมอื่น ๆ | |||
Cloud Engineer เงินเดือนในสหรัฐอเมริกา 2021-22 | เงินเดือนสถาปนิกโซลูชัน AWS ในสหรัฐอเมริกา | เงินเดือนนักพัฒนาแบ็กเอนด์ในสหรัฐอเมริกา | Front End Developer เงินเดือนในสหรัฐอเมริกา |
นักพัฒนาเว็บ เงินเดือนในสหรัฐอเมริกา | คำถามสัมภาษณ์ Scrum Master ในปี 2022 | จะเริ่มอาชีพใน Cyber Security ในปี 2022 ได้อย่างไร? | ตัวเลือกอาชีพในสหรัฐอเมริกาสำหรับนักศึกษาวิศวกรรม |
จะสร้างเธรดใน Java ได้อย่างไร?
สามารถสร้างเธรดใน Java ได้สองวิธี:

- การขยายคลาสเธรด
- การใช้อินเทอร์เฟซที่รันได้
การสร้างเธรดโดยการขยายคลาสเธรด
วิธีการสองสามวิธีของคลาสเธรดและฟังก์ชันต่าง ๆ แสดงไว้ด้านล่าง
- getName() : สำหรับรับชื่อเธรด
- getPriority(): เพื่อรับลำดับความสำคัญของเธรด
- is Alive(): เพื่อค้นหาว่าเธรดกำลังทำงานอยู่หรือไม่
- join(): รอการสิ้นสุดของเธรด
- run() : จุดเริ่มต้นของเธรด
- sleep(): สำหรับการระงับเธรดสำหรับกรอบเวลาที่ระบุ
- start() : เพื่อเปิดใช้งานเธรดผ่านเมธอด run()
ขั้นตอนที่ 1 : แทนที่เมธอด run() ที่ระบุในคลาสเธรด ซึ่งทำหน้าที่เป็นจุดเริ่มต้นสำหรับเธรด และตรรกะของโปรแกรมทั้งหมดควรอยู่ใน 4this
ไวยากรณ์ของเมธอด run() มีดังนี้:
การวิ่งเป็นโมฆะสาธารณะ ( )
ขั้นตอนที่ 2: เริ่มต้นวัตถุเธรดด้วยเมธอด start () ซึ่งมีไวยากรณ์เป็น โมฆะ start ( )
นี่คือตัวอย่างของโปรแกรมมัลติเธรดใน Java:
ตัวอย่างที่ 1:
คลาส MultithreadingDemo ขยายเธรด{
โมฆะสาธารณะ () {
System.out.println(“เธรดของฉันกำลังทำงานอยู่”);
}
โมฆะคงที่สาธารณะหลัก (สตริง args[]){
MultithreadingDemo obj = MultithreadingDemo ใหม่ ();
obj.start();
}
}
ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น:
เธรดของฉันทำงาน
ตัวอย่างที่ 2:
class Count ขยาย Thread
{
นับ()
{
super(“เธรดของฉันกำลังขยาย”);
System.out.println(“เธรดของฉันถูกสร้างขึ้น” + สิ่งนี้);
เริ่ม();
}
โมฆะสาธารณะ ()
{
ลอง
{
สำหรับ (int i=0 ;i<10;i++)
{
System.out.println(“การพิมพ์การนับ” + i);
เธรด. สลีป (1000);
}
}
จับ (InterruptedException จ)
{
System.out.println(“เธรดของฉันถูกขัดจังหวะ”);
}
System.out.println(“กระทู้ของฉันจบลงแล้ว” );
}
}
ตัวอย่างการขยายคลาส
{
โมฆะคงที่สาธารณะหลัก (สตริง args[])
{
นับ cnt = นับใหม่ ();
ลอง
{
ในขณะที่ (ct.isAlive())
{
System.out.println(“เธรดหลักจะยังคงอยู่จนกว่าเธรดย่อยจะใช้งานได้”);
เธรดการนอนหลับ(1500);
}
}
จับ (InterruptedException จ)
{
System.out.println(“เธรดหลักถูกขัดจังหวะ”);
}
System.out.println(“สิ้นสุดการทำงานของเธรดหลัก” );
}
}
ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น
เธรดของฉันถูกสร้างเธรด[my runnable thread,5,main]
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์การนับ 0
การพิมพ์การนับ 1
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์การนับ2
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์นับ3
การพิมพ์นับ4
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์การนับ 5
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์นับ6
การพิมพ์นับ7
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์นับ8
เธรดหลักจะมีชีวิตอยู่จนกว่าเธรดย่อยจะมีชีวิตอยู่
การพิมพ์นับ9
การรันเธรดของฉันสิ้นสุดลง
สิ้นสุดการรันเธรดหลัก
การสร้างเธรดโดยใช้ Runnable Interface
มีสามขั้นตอนสำคัญที่ต้องปฏิบัติตามในขณะที่ใช้วิธีนี้
ขั้นตอนที่ 1 : เมธอด run() ควรถูกใช้งานโดยอินเตอร์เฟสที่รันได้ เมธอด run() นี้ทำหน้าที่เป็นจุดเริ่มต้นสำหรับเธรดและควรมีตรรกะของโปรแกรมทั้งหมด
ไวยากรณ์สำหรับเมธอด run() is
โมฆะสาธารณะ ( )
ขั้นตอนที่ 2: ควรเปิดใช้งานวัตถุเธรดโดยใช้ตัวสร้างที่ระบุด้านล่าง
เธรด (เธรดที่เรียกใช้ได้, ชื่อเธรดสตริง);
ที่นี่ threadObj ทำหน้าที่เป็นคลาสที่ใช้อินเทอร์เฟซที่รันได้ และชื่อเธรดคือชื่อที่กำหนดให้กับเธรดใหม่
ขั้นตอนที่ 3: หลังจากสร้างเธรดอ็อบเจ็กต์ สามารถเริ่มต้นได้โดยเมธอด start() ที่รันเมธอด run()
ไวยากรณ์ของเมธอด start () มีดังนี้
เริ่มต้นเป็นโมฆะ ();

ดูตัวอย่างการสร้างเธรดโดยใช้อินเทอร์เฟซที่รันได้ ที่ นี่
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Java multithreading และการพัฒนาซอฟต์แวร์ เราแนะนำให้ลงทะเบียนใน Executive Post Graduate Program ในการพัฒนาซอฟต์แวร์ ที่นำเสนอโดย IIIT Bangalore ร่วมกับ upGrad
Executive PG Program in Software Development เป็นโปรแกรมออนไลน์ระยะเวลา 13 เดือนที่ออกแบบมาเพื่อช่วยให้มืออาชีพด้านการทำงานก้าวกระโดดครั้งใหญ่ในอาชีพของตนผ่านกรณีศึกษาและโครงการที่เกี่ยวข้องกับอุตสาหกรรม โปรแกรมนี้ยังมีเซสชั่นสดกว่าสิบเซสชั่นจากผู้เชี่ยวชาญในอุตสาหกรรมเพื่อช่วยให้ผู้สมัครเรียนรู้ได้ดีขึ้น
โปรแกรมประกอบด้วยโครงการอุตสาหกรรมเพื่อช่วยให้ผู้สมัครได้รับประสบการณ์ตรงและการเปิดรับในอุตสาหกรรมที่เพียงพอเพื่อให้การเรียนรู้ของพวกเขามีความเกี่ยวข้องและเป็นประโยชน์ การเสร็จสิ้นโปรแกรมจะให้รางวัลแก่ผู้สมัครด้วยการรับรอง IIIT B และสถานะศิษย์เก่าที่เป็นเจ้าข้าวเจ้าของ
โปรแกรมมาพร้อมกับการสนับสนุนตำแหน่ง 360 องศาจาก upGrad ซึ่งส่งผลกระทบต่อผู้เรียนที่จ่ายเงินกว่า 40,000 คนจากทั่วทุกมุมโลกเพื่อให้สิ่งต่าง ๆ ดียิ่งขึ้น upGrad มีฐานผู้เรียนจากกว่า 85 ประเทศ มอบโอกาสอันประเมินค่ามิได้ในการมีเครือข่ายระดับเดียวกันทั่วโลกสำหรับผู้สมัคร
มัลติทาสกิ้งและมัลติเธรดใน Java แตกต่างกันอย่างไร
มัลติทาสกิ้งเป็นกระบวนการที่สามารถทำงานหลายอย่างพร้อมกันได้ และมัลติเธรดเป็นกระบวนการของการดำเนินการหลายเธรดพร้อมกัน โดยแต่ละเธรดทำงานต่างกัน
Java รองรับการสืบทอดหลายรายการหรือไม่
ภาษาการเขียนโปรแกรม Java รองรับการสืบทอดหลายรายการ ซึ่งเป็นกระบวนการที่คลาสใช้อินเทอร์เฟซมากกว่าหนึ่งตัว คลาสสามารถมีการใช้งานเมธอดที่แตกต่างกัน (ค่าเริ่มต้นหรือสแตติก) ในอินเทอร์เฟซ การสืบทอดหลายรายการใน Java สามารถใช้ได้กับอินเทอร์เฟซเท่านั้น ไม่ใช่คลาส ไม่เหมือนกับภาษา C++
มัลติเธรดสามารถปรับปรุงประสิทธิภาพของ Java ได้หรือไม่?
มัลติเธรดช่วยปรับปรุงประสิทธิภาพของ Java โดยทำให้ซีพียูหลายตัวสามารถจัดการกับปัญหาเดียวกันได้ ซึ่งไม่เพียงแต่ทำให้กระบวนการเร็วขึ้น แต่ยังช่วยในการแก้ปัญหาอย่างมีประสิทธิภาพอีกด้วย