public static void main(string args)throws exception
};futuretaskfuturetask = new futuretask(c1);
new thread(futuretask).start();
callable c2= new callable()
};futuretask futuretask2 = new futuretask(c2);
new thread(futuretask2).start();
system.out.println(futuretask.get());
system.out.println(futuretask2.get());
}
執行結果:
task1 start
task2 start
task1 end
完成 任務1
task2 end
完成 任務2
可以看到task1和task2是同時執行的,task2不用等待task1完成後才執行,但是又能確保 先用task1的結果,後用task2的結果。
利用執行緒池來執行:
//宣告固定執行緒數為5的執行緒池
static executorservice mservice = executors.newfixedthreadpool(5);
/** * future模式 future
*/public static void testfuture1() throws executionexception, interruptedexception catch (interruptedexception e)
return "有返回值 執行結束";
});system.out.println("future is down1:"+future.isdone());
system.out.println(future.get());
system.out.println("future is down2:"+future.isdone());
}/**
* futuretask
*/public static void testfuture2() throws executionexception, interruptedexception );
mservice.execute(futuretask);
system.out.println("futuretask is down1:"+futuretask.isdone());
system.out.println(futuretask.get());
system.out.println("futuretask is down2:"+futuretask.isdone());
}
上訴用執行緒池執行了兩種方式寫的future模式 多執行緒 Callable與Future模式
future常用方法 v get 獲取非同步執行的結果,如果沒有結果可用,此方法會阻塞直到非同步計算完成。v get long timeout timeunit unit 獲取非同步執行結果,如果沒有結果可用,此方法會阻塞,但是會有時間限制,如果阻塞時間超過設定的timeout時間,該方法將丟擲異常...
多執行緒 future模式初體驗
第一次使用多執行緒,雖然理解的不是很透徹,但是也值得記錄下。用的是future模式。建立個執行緒池 private executorservice cachedthreadpool executors.newfixedthreadpool 200,new siyuethreadfactory tes...
多執行緒中的設計模式(Future模式)
future模式 給你個引用 你在通過這個引用去獲取資料。給你個鑰匙,自己去拿 其中客戶端實際使用時,採用執行緒等待形式,當other call 執行完成後,喚醒客戶端請求。futureclient public class futureclient start return futuredata ...