java多執行緒 Future 模式

2021-08-25 13:59:12 字數 1462 閱讀 2682

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 ...