public class callableandfuture }; futuretaskfuture = new futuretask(callable); new thread(future).start(); try catch (interruptedexception e) catch (executionexception e) } }
futuretask實現了兩個介面,runnable和future,所以它既可以作為runnable被執行緒執行,又可以作為future得到callable的返回值,那麼這個組合的使用有什麼好處呢?假設有乙個很耗時的返回值需要計算,並且這個返回值不是立刻需要的話,那麼就可以使用這個組合,用另乙個執行緒去計算返回值,而當前執行緒在使用這個返回值之前可以做其它的操作,等到需要這個返回值時,再通過future得到,豈不美哉!這裡有乙個future模式的介紹:
下面來看另一種方式使用callable和future,通過executorservice的submit方法執行callable,並返回future,**如下:
public class callableandfuture }); try catch (interruptedexception e) catch (executionexception e) } }
**是不是簡化了很多,executorservice繼承自executor,它的目的是為我們管理thread物件,從而簡化併發程式設計,executor使我們無需顯示的去管理執行緒的生命週期,是jdk 5之後啟動任務的首選方式。
執行多個帶返回值的任務,並取得多個返回值,**如下:
public class callableandfuture }); } // 可能做一些事情 for(int i = 1; i < 5; i++) catch (interruptedexception e) catch (executionexception e) } } }
所描述的那樣。 Java執行緒 Callable和Future
public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...
Java執行緒 Callable和Future
public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...
Java執行緒 七 Callable和Future
public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...