本文實(shí)際上是對(duì)上文《13.ThreadPoolExecutor線程池之submit方法的一個(gè)延續(xù)或者一個(gè)補(bǔ)充。在上文中提到的submit方法里出現(xiàn)了FutureTask,這不得不停止腳步將方向轉(zhuǎn)向JavaFuture模式。

  Future是并發(fā)編程中的一種設(shè)計(jì)模式,對(duì)于多線程來說,線程A需要等待線程B的結(jié)果,它沒必要一直等待B,可以先拿到一個(gè)未來的Future,等B有了結(jié)果后再取真實(shí)的結(jié)果。

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(callable);    //主線程需要callable線程的結(jié)果,先拿到一個(gè)未來的FutureSystem.out.println(future.get());    //有了結(jié)果后再根據(jù)get方法取真實(shí)的結(jié)果,當(dāng)然如果此時(shí)callable線程如果沒有執(zhí)行完get方法會(huì)阻塞執(zhí)行完,如果執(zhí)行完則直接返回結(jié)果或拋出異常

   也就是說,

網(wǎng)友評(píng)論