Antarmuka yang dapat dipanggil mirip dengan Runnable, yang dapat dilihat dari nama, tetapi Runnable tidak akan mengembalikan hasilnya dan tidak dapat melemparkan pengecualian yang mengembalikan hasilnya. Nilai pengembalian ini bisa mendapatkannya di masa depan, yaitu, masa depan bisa mendapatkan nilai pengembalian dari pelaksanaan tugas asinkron.
Salinan kode adalah sebagai berikut:
paket com.future.test;
impor java.io.filenotfoundException;
impor java.io.ioException;
impor java.util.concurrent.callable;
impor java.util.concurrent.executionException;
impor java.util.concurrent.executorservice;
impor java.util.concurrent.Executors;
impor java.util.concurrent.futuretask;
impor java.util.concurrent.timeunit;
impor java.util.concurrent.timeOutException;
kelas publik mytest {
// menerima pengecualian yang ditangkap dalam metode run, dan kemudian metode khusus melempar pengecualian
// Pengecualian Statis Statis;
/**
* @param args
*/
public static void main (string [] args) {
// TODO Stub Metode yang Dihasilkan Otomatis
Hasil string = "";
ExecutorService Executor = executors.newsinglethreadExecutor ();
Futuretask <string> Future =
FutureTask baru <string> (baru Callable <string> () {// Gunakan antarmuka yang dapat dipanggil sebagai parameter konstruktor
call string publik () {
// Tugas sebenarnya dijalankan di sini, jenis nilai pengembalian di sini adalah string, yang bisa dari jenis apa pun
mencoba {
Thread.sleep (10000);
} catch (InterruptedException e) {
// TODO Blok tangkapan yang dihasilkan otomatis
// pengecualian = e;
//e.printstacktrace ();
}
kembali "11111";
}});
Executor.Execute (Future);
// Anda dapat melakukan hal lain di sini
mencoba {
Hasil = Future.get (5000, TimeUnit.Milliseconds); Anda juga dapat menggunakan Future.get () untuk mendapatkan hasil tanpa mengatur batas waktu eksekusi.
} catch (InterruptedException e) {
//System.out.println("Task telah dibatalkan ");
Future.cancel (true);
} catch (ExecutionException e) {
Future.cancel (true);
} catch (timeoutexception e) {
Future.cancel (true);
} Akhirnya {
executor.shutdown ();
}
System.out.println ("Hasil:"+Hasil);
}
/* public void throwexception () melempar FileNotFoundException, IoException {
if (contoh pengecualian filenotfoundException)
Lempar (FileNotFoundException) Exception;
if (exception instance dari ioException)
Lempar (ioException) pengecualian;
}*/
}