*1: 任務(wù)1正常結(jié)束
*2: 任務(wù)2是個(gè)死循環(huán),這是它的打印結(jié)果
*3: 指示任務(wù)2被取消
*4: 在執(zhí)行future3.get()時(shí)得到任務(wù)3拋出的異常
3:新的任務(wù)執(zhí)行架構(gòu)
在Java 5.0之前啟動(dòng)一個(gè)任務(wù)是通過調(diào)用Thread類的start()方法來實(shí)現(xiàn)的,任務(wù)的提于交和執(zhí)行是同時(shí)進(jìn)行的,如果你想對(duì)任務(wù)的執(zhí)行進(jìn)行調(diào)度或是控制同時(shí)執(zhí)行的線程數(shù)量就需要額外編寫代碼來完成。5.0里提供了一個(gè)新的任務(wù)執(zhí)行架構(gòu)使你可以輕松地調(diào)度和控制任務(wù)的執(zhí)行,并且可以建立一個(gè)類似數(shù)據(jù)庫連接池的線程池來執(zhí)行任務(wù)。這個(gè)架構(gòu)主要有三個(gè)接口和其相應(yīng)的具體類組成。這三個(gè)接口是Executor, ExecutorService和ScheduledExecutorService,讓我們先用一個(gè)圖來顯示它們的關(guān)系:
圖的左側(cè)是接口,圖的右側(cè)是這些接口的具體類。注意Executor是沒有直接具體實(shí)現(xiàn)的。
Executor接口:
是用來執(zhí)行Runnable任務(wù)的,它只定義一個(gè)方法:
execute(Runnable command):執(zhí)行Ruannable類型的任務(wù)
ExecutorService接口:
ExecutorService繼承了Executor的方法,并提供了執(zhí)行Callable任務(wù)和中止任務(wù)執(zhí)行的服務(wù),其定義的方法主要有:
submit(task):可用來提交Callable或Runnable任務(wù),并返回代表此任務(wù)的Future對(duì)象
invokeAll(collection of tasks):批處理任務(wù)集合,并返回一個(gè)代表這些任務(wù)的Future對(duì)象集合
shutdown():在完成已提交的任務(wù)后關(guān)閉服務(wù),不再接受新任務(wù)
shutdownNow():停止所有正在執(zhí)行的任務(wù)并關(guān)閉服務(wù)。
isTerminated():測(cè)試是否所有任務(wù)都執(zhí)行完畢了。
isShutdown():測(cè)試是否該ExecutorService已被關(guān)閉
ScheduledExecutorService接口
在ExecutorService的基礎(chǔ)上,ScheduledExecutorService提供了按時(shí)間安排執(zhí)行任務(wù)的功能,它提供的方法主要有:
schedule(task, initDelay): 安排所提交的Callable或Runnable任務(wù)在initDelay指定的時(shí)間后執(zhí)行。
scheduleAtFixedRate():安排所提交的Runnable任務(wù)按指定的間隔重復(fù)執(zhí)行
scheduleWithFixedDelay():安排所提交的Runnable任務(wù)在每次執(zhí)行完后,等待delay所指定的時(shí)間后重復(fù)執(zhí)行。
代碼:ScheduleExecutorService的例子
public class ScheduledExecutorServiceTest {
public static void main(String[] args)
throws InterruptedException, ExecutionException{
//*1
ScheduledExecutorService service = Executors.newScheduledThreadPool(2);
//*2
Runnable task1 = new Runnable() {
public void run() {
System.out.println("Task repeating.");
}
};
//*3
final ScheduledFuture future1 =
service.scheduleAtFixedRate(task1, 0, 1, TimeUnit.SECONDS);
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |