Java指定週期執行執行緒
使用Java的API可以指定週期地啟動執行緒。
設定從現在開始(從0秒開始),每隔10秒,啟動一個執行緒
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.scheduleAtFixedRate(new PeroidSchedualRunnable(), 0, 10, TimeUnit.SECONDS);
執行的執行緒為
package com.nicchagil.fsl;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class PeroidSchedualRunnable implements Runnable {
public static int count = 0;
public void run() {
// Used to simulate the cost of business
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("PeroidSchedualRunnable run " + count++ + " at " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
觀看日誌可知,其每隔10秒就執行一次
PeroidSchedualRunnable run 0 at 2015-05-06 18:02:37
PeroidSchedualRunnable run 1 at 2015-05-06 18:02:47
PeroidSchedualRunnable run 2 at 2015-05-06 18:02:57
另外,ScheduledExecutorService的另一方法(scheduleWithFixedDelay)稍有不同,此方法設定的是延遲的時間。而scheduleAtFixedRate設定的指定的頻率。
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.scheduleWithFixedDelay(new DelaySchedualRunnable(), 0, 10, TimeUnit.SECONDS);
觀看日誌可知,第0次於18:05:06執行完畢,此時延遲10秒,然後執行第1次,執行完畢後再延遲10秒,如此類推。
DelaySchedualRunnable run 0 at 2015-05-06 18:05:06
DelaySchedualRunnable run 1 at 2015-05-06 18:05:21
DelaySchedualRunnable run 2 at 2015-05-06 18:05:36
注意:如果過程中異常沒有正常處理(被虛擬機器捕獲),將會停止執行,不再繼續週期呼叫。
感覺越說越不好,乾脆引用API的原文:
- ScheduledExecutorService.scheduleAtFixedRate:
Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period; that is executions will commence after initialDelay then initialDelay+period, then initialDelay + 2 * period, and so on. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor. If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.
- ScheduledExecutorService.scheduleWithFixedDelay:
Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given delay between the termination of one execution and the commencement of the next. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor.
相關文章
- 【Java】【多執行緒】執行緒的生命週期Java執行緒
- Java執行緒的生命週期Java執行緒
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 死磕 java執行緒系列之執行緒的生命週期Java執行緒
- Java之執行緒的生命週期Java執行緒
- 多執行緒-執行緒生命週期圖解執行緒圖解
- Java—執行緒的生命週期及執行緒控制方法詳解Java執行緒
- java中執行緒池的生命週期與執行緒中斷Java執行緒
- 【Java基礎】:執行緒的生命週期Java執行緒
- 【原創】Java多執行緒初學者指南(4):執行緒的生命週期Java執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- Java執行緒生命週期與狀態切換Java執行緒
- Java多執行緒——執行緒Java執行緒
- 見過描述得最好的Java執行緒生命週期Java執行緒
- 啃碎併發(二):Java執行緒的生命週期Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- Java執行緒:執行緒中斷Java執行緒
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- iOS執行緒生命週期的監控iOS執行緒
- Java中多執行緒的概述、實現方式、執行緒控制、生命週期、多執行緒程式練習、安全問題的解決...Java執行緒
- Java執行緒中斷與終止執行緒執行Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- Java多執行緒——守護執行緒Java執行緒
- Java多執行緒16:執行緒組Java執行緒
- Java多執行緒18:執行緒池Java執行緒
- java執行緒Java執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- pyav 指定執行緒數目執行緒
- Java執行緒篇——執行緒的開啟Java執行緒