//ExecutorService threadPool= Executors.newCachedThreadPool();//緩存線程池(線程數動態變化),當任務過來服務不過來時,自動增加線程個數來執行任務
/*ExecutorService threadPool= Executors.newSingleThreadExecutor();//單例線程池,線程池中只有一個線程,如果線程池中的線程死亡,就會自動再找一個替補,保證有一個線程--如何實現線程死亡後重新啓動(找替補)
for(int j=1;j<=10;j++){
final int task=j;//處理final
threadPool.execute(new Runnable()//爲線程池放入的任務
{
public void run()
{
for(int i=1;i<=10;i++){
System.out.println(Thread.currentThread().getName()+" loop of "+i+" for task "+task);
}
}
});
}
threadPool.shutdown();//啓動一次順序關閉,執行以前提交的任務,但不接受新任務
//threadPool.shutdownNow();//試圖停止所有正在執行的活動任務,暫停處理正在等待的任務,並返回等待執行的任務列表
*/
//定時器線程池
ScheduledExecutorService threadPool= Executors.newScheduledThreadPool(3);
//過一段時間後執行任務
/*threadPool.schedule(new Runnable()
{
public void run()
{
System.out.println("bombing");
}
}
,10,TimeUnit.SECONDS
);*/
//以固定的頻率執行任務
threadPool.scheduleAtFixedRate(
new Runnable()//任務代碼
{
public void run()
{
System.out.println("bombing");
}
},
2,//隔多長時間後執行定時器
5,//頻率時間
TimeUnit.SECONDS//時間單位
);
//所有的 schedule 方法都接受相對的延遲和週期作爲參數,而不是絕對的時間或日期,將以Date所表示的絕對時間
//轉換成要求的形式很容易.例如,要安排某個以後的 Date 運行,可以使用:schedule(task,date.getTime()-System.currentTimeMillis(),TimeUnit.MILLISECONDS)