本文實際上是對上文《13.ThreadPoolExecutor線程池之submit方法》的一個延續(xù)或者一個補充。在上文中提到的submit方法里出現(xiàn)了FutureTask,這不得不停止腳步將方向轉(zhuǎn)向Java的Future模式。
Future是并發(fā)編程中的一種設(shè)計模式,對于多線程來說,線程A需要等待線程B的結(jié)果,它沒必要一直等待B,可以先拿到一個未來的Future,等B有了結(jié)果后再取真實的結(jié)果。
ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(callable); //主線程需要callable線程的結(jié)果,先拿到一個未來的FutureSystem.out.println(future.get()); //有了結(jié)果后再根據(jù)get方法取真實的結(jié)果,當(dāng)然如果此時callable線程如果沒有執(zhí)行完get方法會阻塞執(zhí)行完,如果執(zhí)行完則直接返回結(jié)果或拋出異常
也就是說,