關於Java-ExecutorService

關於Java-ExecutorService

在Java5之後,透過Executor來啟動Thread比用Thread的start()更好。
在此功能中,可以很容易控制Thread的啟動、執行和關閉,還可以很容易管理Thread Pool。

How to use

1
2
class 必須 implements Runnable,並撰寫run() 方法
create java.util.concurrent.ExecutorService 來執行task

ExecutorService

1
2
3
4
5
6
ExecutorService提供了管理终止的方法,以及可追蹤一個或多個非同步task而生成 Future 的方法。 
可以關閉 ExecutorService,這將導致其停止接受新task。
關閉後,執行程序將終止,將會沒有任務在執行,也没有任務在等待執行,並且無法提交新任務。
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.execute(new TestRunnable());
executorService.shutdown();

get task return value

1
2
3
在Java5後,task分兩種:第一種是class implements Runnable,另一種是class implements Callable。
兩者都可以被ExecutorService執行,但是Runnable task没有return value,而Callable task有return value。
且Callable的call()方法只能透過ExecutorService的(<T> task) 方法執行,return 每一個<T>,是表示task等待完成的 Future<T>。

提供以下方法執行task

1
2
3
1.executorService.execute 沒有retuen value
2.executorService.submit 有return value
3.executorService.invokeAny(任一task完成即cancel其它task) 和 executorService.invokeAll(必須所有task都完成)