Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างเมธอด orTimeout() และ completeOnTimeOut() ใน Java 9?


ทั้ง หรือหมดเวลา() และ completeOnTimeOut() เมธอดที่กำหนดไว้ใน CompletableFuture คลาสและสองวิธีนี้ถูกนำมาใช้ใน Java 9 orTimeout() สามารถใช้เมธอดเพื่อระบุว่าหากงานที่กำหนดไม่เสร็จสิ้นภายในระยะเวลาหนึ่ง โปรแกรมจะหยุดการทำงานและแสดง TimeoutException ในขณะที่ completeOnTimeOut() วิธีการเสร็จสมบูรณ์ อนาคตที่สมบูรณ์ ด้วยค่าที่จัดให้ มิฉะนั้น จะเสร็จสิ้นก่อนหมดเวลาที่กำหนด

ไวยากรณ์สำหรับ orTimeout()

อนาคตที่สมบูรณ์ในอนาคต หรือหมดเวลา (หมดเวลานาน หน่วย TimeUnit) 

ตัวอย่าง

<ก่อน> นำเข้า java.util.concurrent.CompletableFuture นำเข้า java.util.concurrent.TimeUnit คลาสสาธารณะ OrTimeoutMethodTest { โมฆะสาธารณะหลัก (สตริง args []) พ่น InterruptedException { int a =10; int b =15; อนาคตที่สมบูรณ์ .supplyAsync(() -> { ลอง { TimeUnit.SECONDS.sleep(5); } catch(InterruptedException e) { e.printStackTrace(); } return a + b; }) .orTimeout (4, TimeUnit.SECONDS) .เมื่อเสร็จสมบูรณ์ ((ผลลัพธ์ ข้อยกเว้น) -> { System.out.println (ผลลัพธ์); ถ้า (ข้อยกเว้น !=null) exception.printStackTrace (); }); TimeUnit.SECONDS.สลีป(10); }}

ผลลัพธ์

25 


ไวยากรณ์สำหรับ completeOnTimeOut()

CompletableFuture สาธารณะ completeOnTimeout (ค่า T หมดเวลานาน หน่วย TimeUnit) 

ตัวอย่าง

<ก่อน> นำเข้า java.util.concurrent.CompletableFuture; นำเข้า java.util.concurrent.TimeUnit คลาสสาธารณะ CompleteOnTimeOutMethodTest { โมฆะสาธารณะหลัก (สตริง args []) พ่น InterruptedException { int a =10; int b =15; อนาคตที่สมบูรณ์ .supplyAsync(() -> { ลอง { TimeUnit.SECONDS.sleep(5); } catch(InterruptedException e) { e.printStackTrace(); } return a + b; }) .completeOnTimeout (0, 4, TimeUnit.SECONDS) .แล้วยอมรับ (ผลลัพธ์ -> System.out.println(ผลลัพธ์)); TimeUnit.SECONDS.สลีป(10); }}

ผลลัพธ์

25