Rumah >Java >javaTutorial >Di Jawa, bagaimana untuk mendapatkan hasil thread?
1. Konsep
Masa hadapan mewakili hasil tugasan tak segerak yang mungkin belum selesai Panggilan Balik boleh ditambahkan pada hasil ini untuk melaksanakan operasi yang sepadan selepas pelaksanaan tugasan berjaya atau gagal.
2. Antara muka Masa Depan
Antara muka Masa Depan mentakrifkan lima kaedah antara muka utama dan ScheduledFuture mewarisi antara muka ini, dan CompleteFuture dan ForkJoinTask mewarisi antara muka ini.
3. Contoh
package test; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class CallableFutureTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); Callable<Integer> calculateCallable = new Callable<Integer>() { @Override public Integer call() throws Exception { // TODO Auto-generated method stub Thread.sleep(2000);//模拟耗时时间 int result = 1+2; return result; } }; FutureTask<Integer> calculateFutureTask = new FutureTask<>(calculateCallable); Thread t1 = new Thread(calculateFutureTask); t1.start(); //现在加入Thread运行的是一个模拟远程调用耗时的服务,并且依赖他的计算结果(比如网络计算器) try { //模拟耗时任务,主线程做自己的事情,体现多线程的优势 Thread.sleep(3000); int a = 3+5; Integer result = calculateFutureTask.get(); System.out.println("result = "+(a+result));//模拟主线程依赖子线程的运行结果 long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Seperti yang anda boleh lihat dari di atas, ia mengambil masa kira-kira 3 saat, terutamanya masa yang dihabiskan oleh tidur utas utama (3000) Jika tidak Menggunakan Masa Depan dan bergantung pada hasil benang, masa yang kita perlukan mungkin 5s (2s untuk sub-benang + 3s untuk utas utama).
Atas ialah kandungan terperinci Di Jawa, bagaimana untuk mendapatkan hasil thread?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!