6.1 วัตถุปฏิบัติการ

ดังนั้นเราจึงไปถึงส่วนที่ใหญ่ที่สุดของแพ็คเกจ โดยจะอธิบายอินเทอร์เฟซสำหรับการเรียกใช้งานแบบอะซิงโครนัสด้วยความสามารถในการรับผลลัพธ์ผ่านอินเทอร์เฟซ Future และ Callable ตลอดจนบริการและโรงงานสำหรับสร้างเธรดพูล: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool

เพื่อความเข้าใจที่ดีขึ้น เรามาแยกส่วนอินเทอร์เฟซและคลาสกันเล็กน้อย

6.2 การทำให้เป็นจริงของวัตถุปฏิบัติการ

Future<V>เป็นอินเทอร์เฟซที่ยอดเยี่ยมสำหรับการรับผลลัพธ์ของการดำเนินการแบบอะซิงโครนัส วิธีการหลักที่นี่คือวิธีการรับ ซึ่งจะบล็อกเธรดปัจจุบัน (โดยมีหรือไม่มีการหมดเวลา) จนกว่าการดำเนินการแบบอะซิงโครนัสบนเธรดอื่นจะเสร็จสิ้น นอกจากนี้ยังมีวิธีการเพิ่มเติมสำหรับการยกเลิกการดำเนินการและตรวจสอบสถานะปัจจุบัน คลาส FutureTask มักใช้เป็นการดำเนินการ

RunnableFuture<V>- หาก Future เป็นอินเทอร์เฟซสำหรับ Client API แสดงว่ามีการใช้อินเทอร์เฟซ RunnableFuture เพื่อเริ่มส่วนอะซิงโครนัสแล้ว การรันเมธอด run() สำเร็จจะสิ้นสุดการดำเนินการแบบอะซิงโครนัสและอนุญาตให้ดึงผลลัพธ์ผ่านเมธอด get

Callable<V>- อะนาล็อกเพิ่มเติมของอินเทอร์เฟซ Runnable สำหรับการทำงานแบบอะซิงโครนัส อนุญาตให้คุณส่งคืนค่าที่พิมพ์และส่งข้อยกเว้นที่ตรวจสอบแล้ว แม้ว่าอินเทอร์เฟซนี้ไม่มีเมธอด run() แต่คลาส java.util.concurrent จำนวนมากก็รองรับพร้อมกับ Runnable

FutureTask<V>— การใช้งานอินเทอร์เฟซ Future/RunnableFuture การดำเนินการแบบอะซิงโครนัสถูกนำไปเป็นอินพุตให้กับหนึ่งในคอนสตรัคเตอร์ในรูปแบบของออบเจกต์ที่รันได้หรือเรียกได้ คลาส FutureTask นั้นได้รับการออกแบบให้เปิดใช้งานในเธรดของผู้ปฏิบัติงาน ตัวอย่างเช่น ผ่าน new Thread(task).start() หรือผ่าน ThreadPoolExecutor ผลลัพธ์ของการดำเนินการแบบอะซิงโครนัสจะดึงข้อมูลผ่านเมธอด get(...)

Delayed- ใช้สำหรับงานแบบอะซิงโครนัสที่ควรเริ่มในอนาคต เช่นเดียวกับใน DelayQueue ให้คุณตั้งเวลาก่อนเริ่มการทำงานแบบอะซิงโครนัส

ScheduledFuture<V>- ส่วนต่อประสานเครื่องหมายที่รวมส่วนต่อประสานในอนาคตและส่วนต่อประสานที่ล่าช้า

RunnableScheduledFuture<V>- อินเทอร์เฟซที่รวม RunnableFuture และ ScheduledFuture นอกจากนี้ คุณสามารถระบุได้ว่างานนั้นเป็นงานแบบครั้งเดียวหรือควรรันที่ความถี่ที่ระบุ