//*4
ScheduledFuture future2 = service.schedule(new Callable(){
public String call(){
future1.cancel(true);
return "task cancelled!";
}
}, 5, TimeUnit.SECONDS);
System.out.println(future2.get());
//*5
service.shutdown();
}
}
這個例子有兩個任務,第一個任務每隔一秒打印一句“Task repeating”,第二個任務在5秒鐘后取消第一個任務。
*1: 初始化一個ScheduledExecutorService對象,這個對象的線程池大小為2。
*2: 用內(nèi)函數(shù)的方式定義了一個Runnable任務。
*3: 調(diào)用所定義的ScheduledExecutorService對象來執(zhí)行任務,任務每秒執(zhí)行一次。能重復執(zhí)行的任務一定是Runnable類型。注意我們可以用TimeUnit來制定時間單位,這也是Java 5.0里新的特征,5.0以前的記時單位是微秒,現(xiàn)在可精確到奈秒。
*4: 調(diào)用ScheduledExecutorService對象來執(zhí)行第二個任務,第二個任務所作的就是在5秒鐘后取消第一個任務。
*5: 關閉服務。
Executors類
雖然以上提到的接口有其實現(xiàn)的具體類,但為了方便Java 5.0建議使用Executors的工具類來得到Executor接口的具體對象,需要注意的是Executors是一個類,不是Executor的復數(shù)形式。Executors提供了以下一些static的方法:
callable(Runnable task): 將Runnable的任務轉(zhuǎn)化成Callable的任務
newSingleThreadExecutor: 產(chǎn)生一個ExecutorService對象,這個對象只有一個線程可用來執(zhí)行任務,若任務多于一個,任務將按先后順序執(zhí)行。
newCachedThreadPool(): 產(chǎn)生一個ExecutorService對象,這個對象帶有一個線程池,線程池的大小會根據(jù)需要調(diào)整,線程執(zhí)行完任務后返回線程池,供執(zhí)行下一次任務使用。
newFixedThreadPool(int poolSize):產(chǎn)生一個ExecutorService對象,這個對象帶有一個大小為poolSize的線程池,若任務數(shù)量大于poolSize,任務會被放在一個queue里順序執(zhí)行。
newSingleThreadScheduledExecutor:產(chǎn)生一個ScheduledExecutorService對象,這個對象的線程池大小為1,若任務多于一個,任務將按先后順序執(zhí)行。
newScheduledThreadPool(int poolSize): 產(chǎn)生一個ScheduledExecutorService對象,這個對象的線程池大小為poolSize,若任務數(shù)量大于poolSize,任務會在一個queue里等待執(zhí)行
以下是得到和使用ExecutorService的例子:
代碼:如何調(diào)用Executors來獲得各種服務對象
//Single Threaded ExecutorService
ExecutorService singleThreadeService = Executors.newSingleThreadExecutor();
//Cached ExecutorService
ExecutorService cachedService = Executors.newCachedThreadPool();
//Fixed number of ExecutorService
ExecutorService fixedService = Executors.newFixedThreadPool(3);
//Single ScheduledExecutorService
ScheduledExecutorService singleScheduledService =
Executors.newSingleThreadScheduledExecutor();
//Fixed number of ScheduledExecutorService
ScheduledExecutorService fixedScheduledService =
Executors.newScheduledThreadPool(3);
相關推薦:計算機等級考試二級Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |