อินเทอร์เฟซ callable นั้นคล้ายกับ Runnable ซึ่งสามารถมองเห็นได้จากชื่อ แต่ Runnable จะไม่ส่งคืนผลลัพธ์และไม่สามารถโยนข้อยกเว้นที่ส่งคืนผลลัพธ์ได้ . ค่าผลตอบแทนนี้สามารถรับได้ในอนาคตนั่นคืออนาคตจะได้รับค่าตอบแทนของการดำเนินการแบบอะซิงโครนัสของงาน
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.future.test;
นำเข้า java.io.filenotfoundException;
นำเข้า java.io.ioException;
นำเข้า java.util.concurrent.callable;
นำเข้า java.util.concurrent.executionException;
นำเข้า java.util.concurrent.executorservice;
นำเข้า java.util.concurrent.executors;
นำเข้า java.util.concurrent.futuretask;
นำเข้า java.util.concurrent.timeUnit;
นำเข้า java.util.concurrent.timeoutexception;
ชั้นเรียนสาธารณะ mytest {
// รับข้อยกเว้นที่จับได้ในวิธีการเรียกใช้จากนั้นวิธีการที่กำหนดเองจะส่งข้อยกเว้น
// ข้อยกเว้นแบบคงที่แบบคงที่ส่วนตัว;
-
* @param args
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
สตริงผลลัพธ์ = "";
ExecutorService Executor = Executors.NewSingLetHreadExecutor ();
FutureTask <String> future =
ใหม่ FutureTask <String> (ใหม่ callable <String> () {// ใช้อินเตอร์เฟส callable เป็นพารามิเตอร์ constructor
การเรียกสตริงสาธารณะ () {
// งานจริงถูกดำเนินการที่นี่ประเภทค่าส่งคืนที่นี่คือสตริงซึ่งสามารถเป็นประเภทใดก็ได้
พยายาม {
Thread.sleep (10,000);
} catch (interruptedException e) {
// todo catch block ที่สร้างอัตโนมัติ
// exception = e;
//e.printstacktrace ();
-
กลับ "11111";
-
Executor.execute (อนาคต);
// คุณสามารถทำอะไรได้ที่นี่
พยายาม {
ผลลัพธ์ = future.get (5000, timeunit.milliseconds); คุณยังสามารถใช้ future.get () เพื่อรับผลลัพธ์โดยไม่ต้องตั้งค่าการหมดเวลาการดำเนินการ
} catch (interruptedException e) {
//system.out.println("task ถูกยกเลิก ");
Future.cancel (จริง);
} catch (ExecutionException E) {
Future.cancel (จริง);
} catch (TimeOutException e) {
Future.cancel (จริง);
} ในที่สุด {
Executor.shutdown ();
-
System.out.println ("ผลลัพธ์:"+ผลลัพธ์);
-
/* โมฆะสาธารณะ throwexception () พ่น filenotfoundexception, ioexception {
ถ้า (อินสแตนซ์ข้อยกเว้นของ FilenotFoundException)
Throw (FilenotFoundException) ข้อยกเว้น;
ถ้า (ข้อยกเว้นของ IOException)
ข้อยกเว้นโยน (ioexception);
-
-