วิธีการเรียกใช้หลายเธรดพร้อมกันใน Java? แนวทางการบริการ

เผยแพร่แล้ว: 2021-10-09
วิธีการเรียกใช้หลายเธรดพร้อมกันใน Java? แนวทางการบริการ

ลองมาดูตัวอย่างนี้อีกครั้ง: จะรับสถานะ Ping ของ HTTP End Point ใน Java ได้อย่างไร

คุณสังเกตเห็นการทำงานของเธรดสำหรับตัวอย่างนั้นหรือไม่? เป็นลำดับ. What if you have 500 endpoints? ฉันเดาว่าคุณต้องรออย่างน้อย 5 นาทีจึงจะได้ผล ซึ่งฉันแน่ใจว่าไม่ใช่ทางออกที่ดีที่สุด

ตอนนี้อะไร? คำถามที่ถูกต้องก็คือ:

  • วิธีการเรียกใช้หลายเธรดพร้อมกัน?
  • วิธีการใช้หลายเธรดใน Java?
  • ฉันจะเรียกใช้เธรดต่าง ๆ ใน Java ได้อย่างไร
  • Java – การสอนการเขียนโปรแกรมแบบมัลติเธรดอยู่ที่ไหน
  • หัวข้อ: จะใช้หลายเธรดเพื่อเพิ่มความเร็วในการประมวลผลได้อย่างไร?

ExecutorService Approach คือคำตอบของคุณ

Executor ที่จัดเตรียมวิธีในการจัดการการยุติและวิธีการที่สามารถสร้างอนาคตสำหรับการติดตามความคืบหน้าของงานแบบอะซิงโครนัสตั้งแต่หนึ่งงานขึ้นไป

ExecutorService สามารถปิดได้ ซึ่งจะทำให้ปฏิเสธงานใหม่ มีวิธีการสองวิธีในการปิด ExecutorService วิธี shutdown() จะช่วยให้งานที่ส่งก่อนหน้านี้สามารถดำเนินการได้ก่อนที่จะยุติ ในขณะที่วิธี shutdownNow() จะป้องกันไม่ให้งานรอเริ่มต้นขึ้นและพยายามหยุดการทำงานที่กำลังดำเนินการอยู่

เมื่อยุติการดำเนินการ ผู้ดำเนินการไม่มีงานใดที่กำลังดำเนินการอยู่ ไม่มีงานใดที่รอการดำเนินการ และไม่สามารถส่งงานใหม่ได้ ExecutorService ที่ไม่ได้ใช้ควรปิดตัวลงเพื่อให้สามารถเรียกคืนทรัพยากรได้

การส่งเมธอดขยายวิธีการพื้นฐาน Executor.execute ( java.lang.Runnable ) โดยการสร้างและส่งคืน Future ที่สามารถใช้เพื่อยกเลิกการดำเนินการและ/หรือรอการดำเนินการให้เสร็จสิ้น เมธอด invokeAny และ invokeAll ดำเนินการในรูปแบบที่เป็นประโยชน์มากที่สุดของการดำเนินการจำนวนมาก ดำเนินการชุดของงานแล้วรออย่างน้อยหนึ่งรายการหรือทั้งหมดเพื่อให้เสร็จสมบูรณ์ (Class ExecutorCompletionService สามารถใช้เขียนตัวแปรที่กำหนดเองของวิธีการเหล่านี้)

คลาส Executors จัดเตรียมวิธีการจากโรงงานสำหรับบริการตัวดำเนินการที่ให้ไว้ในแพ็คเกจนี้

  • java – ExecutorService จะรอให้งานทั้งหมดเสร็จสิ้นได้อย่างไร
  • คำแนะนำเกี่ยวกับ Java ExecutorService
  • Java Thread Pool – คำอธิบาย ExecutorService

ด้านล่างนี้เป็นตัวอย่าง Java อย่างง่ายที่อธิบายการ usage of ExecutorService

เอาท์พุท:

ตอนนี้ชำระเงินผล

มันควรจะเป็นในไม่กี่วินาที ฉันหวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์ ลองเรียกใช้สิ่งนี้มากกว่าหนึ่งครั้ง และคุณอาจเห็นผลลัพธ์ที่แตกต่างกัน เนื่องจากเธรดทั้งหมดทำงานแบบคู่ขนานกัน และใครจะได้รับผลลัพธ์ที่รวดเร็ว คุณจะเห็นผลลัพธ์โพสต์ในคอนโซล Eclipse

แจ้งให้เราทราบสำหรับคำถามใด ๆ