ในฐานะวิศวกรแบ็กเอนด์ เราต้องเผชิญกับสถานการณ์ในการประมวลผลข้อมูลแบบอะซิงโครนัส วันนี้เรามาดูวิธีการทำใน java และวิธีทำต่างๆ

Thread

องค์ประกอบพื้นฐานแต่ทรงพลังของ Java concurrency คือ Thread. เธรดของ Java นั้นเชื่อมโยงกับเธรดของระบบปฏิบัติการจริง ๆ วิธีพื้นฐานในการสร้าง a Thread คือการขยายและแทนที่ run :

การเริ่มเธรดทำให้เกิด run() ที่จะเรียก
คุณอาจถาม; ใช่ Thread มีวิธีอื่นมากมายที่สามารถแทนที่ได้:

  • ในกรณีส่วนใหญ่ เราไม่ต้องการแทนที่วิธีการอื่นๆ ของเธรด
  • เมื่อเราขยาย Thread คลาสขยายคลาสสูญเสียความสามารถในการขยายเพิ่มเติมเนื่องจาก Java ไม่รองรับการสืบทอดหลายรายการ
  • แต่ละเธรดมีวัตถุของตัวเองเมื่อเราขยายมัน และไม่ดีต่อสุขภาพของหน่วยความจำเมื่อมีจำนวนมาก Objects of the extended Thread สร้าง.

Java จัดการกับปัญหาเหล่านี้ด้วยอินเทอร์เฟซ Runnable ในความเป็นจริง, Thread มีวิธีการโอเวอร์โหลดที่ใช้ Runnable

Runnable

Runnable เป็นอินเทอร์เฟซที่มีวิธีเดียวเท่านั้น: run(). ใช่ Runnable เป็นอินเทอร์เฟซที่ใช้งานได้ และสามารถสร้างอินสแตนซ์ได้ด้วยฟังก์ชันแลมบ์ดา แต่ก็เป็นวิธีที่ง่ายในการทำเช่นนี้ สำหรับสิ่งที่ซับซ้อน เราอาจต้องการใช้งาน ดูความแตกต่างที่นี่ มันคือทั้งหมดที่เกี่ยวกับข้อกำหนด:

แม้ว่า Runnable จะมี a run()ไม่ใช่ Thread แต่เป็นเพียงคลาส Java จนกว่าจะถูกควบคุมโดย (ส่งผ่านไปยัง) Thread การเริ่มต้นของเธรดทำให้วัตถุที่รันได้ของ run() ที่จะเรียก

ใช่ Java ได้รับการแก้ไขในเวอร์ชัน 1.5 และเรียกว่า Callable

Callable<V>

Callable เป็นอินเทอร์เฟซทั่วไป ทำไม รันคำสั่งนี้ของค่าส่งกลับเป็นคำสั่งทั่วไปรันคำสั่งนี้ Callable เป็นอินเทอร์เฟซที่ใช้งานได้และ call() เป็นเมธอดเดียว ซึ่งเป็นเมธอดที่ไม่มีอาร์กิวเมนต์ที่ส่ง Exception และคืนค่าการเรียกใช้ค่าคำสั่งนี้แบบทั่วไป

การนำ Callable ไปใช้นั้นคล้ายกับ Runnable มาก:

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

อย่างที่คุณเห็น ไม่มีพฤติกรรมควบคุมในการสร้างและเรียกใช้เธรด (เรียกใช้ได้หรือเรียกได้ด้วยเช่นกัน) เราอาจต้องการควบคุมจำนวนเธรดที่ทำงานในแต่ละครั้ง เนื่องจากแต่ละเธรดเกี่ยวข้องกับเธรดของ OS จำนวนเธรดที่เรารันควรน้อยกว่าจำนวนคอร์ของ CPU ที่มีอยู่ เมื่อรวมกันแล้ว Java แก้ปัญหาโดย ExecutorService อินเตอร์เฟซ.
ด้านบนเป็นบทความที่ให้ข้อมูลเกี่ยวกับ การเขียนโปรแกรม Async ใน Java: Part I.
โปรดติดต่อเราผ่านทางส่วนความคิดเห็น ในกรณีที่คุณมีคำถามใดๆ เกี่ยวกับคำแนะนำที่เราได้แชร์ไว้ข้างต้น