
1. แนวคิด
อนาคตแสดงถึงผลลัพธ์ของงานอะซิงโครนัสที่อาจยังไม่เสร็จสมบูรณ์ สามารถเพิ่มการโทรกลับลงในผลลัพธ์นี้ เพื่อดำเนินการที่เกี่ยวข้องหลังจากการดำเนินการสำเร็จหรือล้มเหลว
2. อินเทอร์เฟซในอนาคต
อินเทอร์เฟซในอนาคตกำหนดวิธีอินเทอร์เฟซหลักห้าวิธี RunnableFuture และ ScheduleFuture สืบทอดอินเทอร์เฟซนี้ และ CompleteFuture และ ForkJoinTask สืบทอดอินเทอร์เฟซนี้
3. ตัวอย่าง
การทดสอบบรรจุภัณฑ์
นำเข้า java.util.concurrent.Callable;
นำเข้า java.util.concurrent.ExecutionException;
นำเข้า java.util.concurrent.FutureTask;
คลาสสาธารณะ CallableFutureTest {
โมฆะคงที่สาธารณะ main (String [] args) {
startTime ยาว = System.currentTimeMillis();
Callable<Integer> CalculatorCallable = ใหม่ Callable<Integer>() {
@แทนที่
การเรียกจำนวนเต็มสาธารณะ () พ่นข้อยกเว้น {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
Thread.sleep (2000); // การจำลองใช้เวลานาน int ผลลัพธ์ = 1+2;
ส่งคืนผลลัพธ์;
-
-
FutureTask<Integer> คำนวณFutureTask = FutureTask ใหม่<>(calculateCallable);
เธรด t1 = เธรดใหม่ (calculateFutureTask);
t1.เริ่มต้น();
//ตอนนี้เข้าร่วม Thread เพื่อเรียกใช้บริการที่ใช้เวลานานซึ่งจำลองการโทรระยะไกลและอาศัยผลการคำนวณ (เช่น เครื่องคำนวณเครือข่าย)
พยายาม {
//จำลองงานที่ใช้เวลานาน เธรดหลักทำหน้าที่ของตัวเอง สะท้อนถึงข้อดีของ Thread.sleep(3000) แบบมัลติเธรด
อินท์เอ = 3+5;
ผลลัพธ์จำนวนเต็ม = คำนวณFutureTask.get();
System.out.println("result = "+(a+result));//จำลองผลลัพธ์การทำงานของเธรดหลักโดยอาศัยเธรดย่อยแบบยาว endTime = System.currentTimeMillis();
System.out.println("time = "+(endTime-startTime)+"ms");
} จับ (InterruptedException | ExecutionException e) {
// TODO บล็อก catch ที่สร้างขึ้นอัตโนมัติ
e.printStackTrace();
-
-
- ดังที่คุณเห็นจากข้างต้น เวลาข้างต้นคือประมาณ 3 วินาที ที่จริงแล้วคือเวลาที่ใช้โดยเธรดหลัก (3000) หากเราไม่ใช้ Future และอาศัยผลลัพธ์ของเธรด เวลาที่เราอาจต้องการอาจเป็น 5 วินาที (เธรดย่อย 2 วินาที + เธรดหลัก 3 วินาที)
ข้างต้นคือ วิธีที่ Future ได้รับผลลัพธ์ของเธรดใน Java อาจกล่าวได้ว่า Future มีความยืดหยุ่นมากกว่าในการประมวลผลเธรด กลไกโดยประมาณคือเมื่อเธรดหนึ่งทำงานอยู่ อีกเธรดหนึ่งจะทำงานในเวลาเดียวกัน หากสนใจสามารถเรียนรู้เพิ่มเติมหลังเลิกเรียนได้