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