มัลติเธรดใน Java – เรียนรู้ด้วยตัวอย่าง

เผยแพร่แล้ว: 2022-06-23

Java เป็นภาษาโปรแกรมที่สนับสนุนโปรแกรมแบบมัลติเธรด โปรแกรมแบบมัลติเธรดรองรับสองส่วนหรือมากกว่า (เธรด) ที่ทำงานพร้อมกัน จัดการงานต่างๆ ซึ่งช่วยให้ใช้งาน 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 ได้สองวิธี:

  1. การขยายคลาสเธรด
  2. การใช้อินเทอร์เฟซที่รันได้

การสร้างเธรดโดยการขยายคลาสเธรด

วิธีการสองสามวิธีของคลาสเธรดและฟังก์ชันต่าง ๆ แสดงไว้ด้านล่าง

  • 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 โดยทำให้ซีพียูหลายตัวสามารถจัดการกับปัญหาเดียวกันได้ ซึ่งไม่เพียงแต่ทำให้กระบวนการเร็วขึ้น แต่ยังช่วยในการแก้ปัญหาอย่างมีประสิทธิภาพอีกด้วย