国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Timer中的schedule()和scheduleAtFixedRate()

2019-11-06 06:38:55
字體:
來源:轉載
供稿:網友

書上講解時,有點小問題,網上講解很亂,下面自己實現一下區別

使用工具:IntelliJ IDEA

1.當TimerTask中執行時長小于給定周期period時,且給定執行TimerTask的時間晚于當前時間  (即正常情況下)

schedule()的情況

public class Run3 {    PRivate static Timer timer = new Timer();    private static int runCount = 0;    static public class MyTask1 extends TimerTask {        @Override        public void run() {            try {                System.out.println("1 begin 運行了! " + new Date());                Thread.sleep(3000);                System.out.println("1 end 結束了" + new Date());                runCount++;                if (runCount >= 5) {                    timer.cancel();                }            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) {        try {            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 14:42:00";            Date date = sdf.parse(dateString);            timer.schedule(task1,date,5000);        } catch (ParseException e) {            e.printStackTrace();        }    }}

【此為完整代碼,下面只是復制關鍵代碼】

運行結果

time: 2017-03-06 14:41:28 -------------------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 14:42:00 CST 2017---------------------------->執行時間1 end 結束了Mon Mar 06 14:42:03 CST 2017---------------------------------->執行完成時間,執行時長3秒1 begin 運行了! Mon Mar 06 14:42:05 CST 2017---------------------------->下一次執行時間,周期5秒1 end 結束了Mon Mar 06 14:42:08 CST 20171 begin 運行了! Mon Mar 06 14:42:10 CST 20171 end 結束了Mon Mar 06 14:42:13 CST 20171 begin 運行了! Mon Mar 06 14:42:15 CST 20171 end 結束了Mon Mar 06 14:42:18 CST 20171 begin 運行了! Mon Mar 06 14:42:20 CST 20171 end 結束了Mon Mar 06 14:42:23 CST 2017Process finished with exit code 0

scheduleAtFixedRate()的情況

將上面關鍵行的改為

timer.scheduleAtFixedRate(task1,date,5000);

運行結果

time: 2017-03-06 14:53:151 begin 運行了! Mon Mar 06 14:54:00 CST 20171 end 結束了Mon Mar 06 14:54:03 CST 20171 begin 運行了! Mon Mar 06 14:54:05 CST 20171 end 結束了Mon Mar 06 14:54:08 CST 20171 begin 運行了! Mon Mar 06 14:54:10 CST 20171 end 結束了Mon Mar 06 14:54:13 CST 20171 begin 運行了! Mon Mar 06 14:54:15 CST 20171 end 結束了Mon Mar 06 14:54:18 CST 20171 begin 運行了! Mon Mar 06 14:54:20 CST 20171 end 結束了Mon Mar 06 14:54:23 CST 2017Process finished with exit code 0

結果:此條件下兩種方法的結果相同,均是在給定的周期為5下循環執行

2.當TimerTask中執行時長大于給定周期period時,而給定執行TimerTask的時間晚于當前時間  

schedule()的情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 14:59:00";            Date date = sdf.parse(dateString);            timer.schedule(task1,date,2000);

運行結果

time: 2017-03-06 14:58:38---------------------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 14:59:00 CST 2017----------------------------->執行時間1 end 結束了Mon Mar 06 14:59:03 CST 2017----------------------------------->執行完成時間,執行時長3秒1 begin 運行了! Mon Mar 06 14:59:03 CST 2017----------------------------->下次執行時間,周期3秒1 end 結束了Mon Mar 06 14:59:06 CST 20171 begin 運行了! Mon Mar 06 14:59:06 CST 20171 end 結束了Mon Mar 06 14:59:09 CST 20171 begin 運行了! Mon Mar 06 14:59:09 CST 20171 end 結束了Mon Mar 06 14:59:12 CST 20171 begin 運行了! Mon Mar 06 14:59:12 CST 20171 end 結束了Mon Mar 06 14:59:15 CST 2017Process finished with exit code 0

scheduleAtFixedRate()的情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 15:05:00";            Date date = sdf.parse(dateString);            timer.scheduleAtFixedRate(task1,date,2000);

運行結果

time: 2017-03-06 15:04:18------------------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 15:05:00 CST 2017-------------------------->執行時間1 end 結束了Mon Mar 06 15:05:03 CST 2017-------------------------------->執行結束時間,執行時長3秒1 begin 運行了! Mon Mar 06 15:05:03 CST 2017-------------------------->下一次開始時間,周期3秒1 end 結束了Mon Mar 06 15:05:06 CST 20171 begin 運行了! Mon Mar 06 15:05:06 CST 20171 end 結束了Mon Mar 06 15:05:09 CST 20171 begin 運行了! Mon Mar 06 15:05:09 CST 20171 end 結束了Mon Mar 06 15:05:12 CST 20171 begin 運行了! Mon Mar 06 15:05:12 CST 20171 end 結束了Mon Mar 06 15:05:15 CST 2017Process finished with exit code 0

結果:當執行TimerTask的時長大于周期時,任務執行的周期改為執行任務的時長,兩種方法沒有區別

3.當TimerTask中執行時長小于給定周期period時,而給定執行TimerTask的時間早于當前時間  

schedule()情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 15:05:00";            Date date = sdf.parse(dateString);            timer.schedule(task1,date,5000);

運行結果

time: 2017-03-06 15:11:00----------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 15:11:00 CST 2017------------------>執行時間1 end 結束了Mon Mar 06 15:11:03 CST 2017------------------------>執行完成時間,時長3秒1 begin 運行了! Mon Mar 06 15:11:05 CST 2017------------------>下一次執行時間,周期5秒1 end 結束了Mon Mar 06 15:11:08 CST 20171 begin 運行了! Mon Mar 06 15:11:10 CST 20171 end 結束了Mon Mar 06 15:11:13 CST 20171 begin 運行了! Mon Mar 06 15:11:15 CST 20171 end 結束了Mon Mar 06 15:11:18 CST 20171 begin 運行了! Mon Mar 06 15:11:20 CST 20171 end 結束了Mon Mar 06 15:11:23 CST 2017Process finished with exit code 0

scheduleAtFixedRate()情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 15:05:00";            Date date = sdf.parse(dateString);            timer.scheduleAtFixedRate(task1,date,5000);運行結果

time: 2017-03-06 15:09:28------------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 15:09:28 CST 2017-------------------->執行時間1 end 結束了Mon Mar 06 15:09:31 CST 2017-------------------------->執行完成時間,時長3秒1 begin 運行了! Mon Mar 06 15:09:31 CST 2017-------------------->下一次執行時間,周期3秒1 end 結束了Mon Mar 06 15:09:34 CST 20171 begin 運行了! Mon Mar 06 15:09:34 CST 20171 end 結束了Mon Mar 06 15:09:37 CST 20171 begin 運行了! Mon Mar 06 15:09:37 CST 20171 end 結束了Mon Mar 06 15:09:40 CST 20171 begin 運行了! Mon Mar 06 15:09:40 CST 20171 end 結束了Mon Mar 06 15:09:43 CST 2017Process finished with exit code 0

結果:此情況下,兩種方法的調用出現了區別,schedule()方法的實際周期仍然是給定周期,而scheduleAtFixedRate()方法的實際周期則為執行時長

4.當TimerTask中執行時長大于給定周期period時,而給定執行TimerTask的時間早于當前時間  

schedule()情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 15:05:00";            Date date = sdf.parse(dateString);            timer.schedule(task1,date,2000);運行結果

time: 2017-03-06 15:12:24---------------------------------------------------->當前時間1 begin 運行了! Mon Mar 06 15:12:24 CST 2017----------------------->執行時間1 end 結束了Mon Mar 06 15:12:27 CST 2017----------------------------->執行完成時間,時長3秒1 begin 運行了! Mon Mar 06 15:12:27 CST 2017---------------------->下一次執行時間,周期3秒1 end 結束了Mon Mar 06 15:12:30 CST 20171 begin 運行了! Mon Mar 06 15:12:30 CST 20171 end 結束了Mon Mar 06 15:12:33 CST 20171 begin 運行了! Mon Mar 06 15:12:33 CST 20171 end 結束了Mon Mar 06 15:12:36 CST 20171 begin 運行了! Mon Mar 06 15:12:36 CST 20171 end 結束了Mon Mar 06 15:12:39 CST 2017Process finished with exit code 0

scheduleAtFixedRate()情況

            MyTask1 task1=new MyTask1();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            System.out.println("time: " + sdf.format(new Date()));            String dateString = "2017-3-06 15:05:00";            Date date = sdf.parse(dateString);            timer.scheduleAtFixedRate(task1,date,2000);運行結果

time: 2017-03-06 15:13:19------------------------------------------------>當前時間1 begin 運行了! Mon Mar 06 15:13:19 CST 2017------------------->執行時間1 end 結束了Mon Mar 06 15:13:22 CST 2017------------------------->執行完成時間,時長3秒1 begin 運行了! Mon Mar 06 15:13:22 CST 2017------------------->下一次執行時間,周期3秒1 end 結束了Mon Mar 06 15:13:25 CST 20171 begin 運行了! Mon Mar 06 15:13:25 CST 20171 end 結束了Mon Mar 06 15:13:28 CST 20171 begin 運行了! Mon Mar 06 15:13:28 CST 20171 end 結束了Mon Mar 06 15:13:31 CST 20171 begin 運行了! Mon Mar 06 15:13:31 CST 20171 end 結束了Mon Mar 06 15:13:34 CST 2017Process finished with exit code 0

結果 : 此情況下沒有區別

5.結論

當執行時長大于周期時,以時長為周期

當給定的執行時間早于當前時間時,schedule()方法的周期為給定的周期,而scheduleAtFixedRate()方法的周期為執行的時長


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延安市| 盐边县| 大兴区| 湘乡市| 南岸区| 陇川县| 汨罗市| 依安县| 会理县| 通道| 奉贤区| 巩留县| 枞阳县| 齐河县| 原阳县| 许昌县| 梧州市| 信阳市| 定西市| 冀州市| 崇阳县| 巴马| 腾冲县| 太仓市| 贺州市| 平潭县| 陕西省| 昌江| 常州市| 宣化县| 伊金霍洛旗| 依兰县| 泗阳县| 平遥县| 福建省| 博野县| 专栏| 巴彦淖尔市| 商水县| 禹城市| 集安市|