大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java編程入門,定時任務timer循環

Java編程入門,定時任務timer循環

更新時間:2020-05-18 15:23:42 來源:動力節點 瀏覽3825次

什么是Timer

Timer是java.util工具包中提供的定時任務類。簡潔易上手的使用方式,能幫我們快速構建一個定時任務。

如何使用Timer

使用Timer配置與執行定時任務,由兩個部分組成

1.調度者Timer類

2.任務內容類TimerTask類(該類實現了Runnable接口,TimerTask是一個虛類)

使用步驟

1.創建一個Timer對象

2.創建一個Task類,需要繼承TimerTask類,并且實現Runnable的run方法,用于定義具體的定時任務執行內容

3.調用Timer對象的schedule方法,并且將步驟的Task對象傳入,同時傳入需要延遲執行的時間,和定時任務執行的間隔時間。

從源碼分析Java定時任務工具類Timer

Java編程入門,定時任務timer循環

實現原理

Timer類原理

Timer類是一個調度者的角色。它包含了兩個最重要的部分:1.任務隊列TaskQueue2.調度線程TimerThread。

調度線程TimerThread

當初始化一個Timer對象的時候,就會執行TimerThread線程對象。該線程會進入一個自旋,不斷查詢任務隊列TaskQueue,如果隊列為空,在線程等待。否則會獲取執行時間,并且與當前時間比較,如果未到執行時間則等待差值。并且如果是重復執行的任務,會再次丟入任務隊列TaskQueue。

Java編程入門,定時任務timer循環

任務隊列TaskQueue

TaskQueue是一個小頂堆的數據結構,用于存儲TimerTask。因此可以保證每次從隊列中獲取的任務都是最近要執行的任務。

當Timer對象調用schedule方法時,會將TimerTask丟入任務隊列,并且喚醒調度者線程

Java編程入門,定時任務timer循環  

Timer類的缺點

1.imer是單線程的,如果一次執行多個定時任務,會導致某些任務被其他任務所阻塞。比如A任務每秒執行一次,B任務10秒執行一次,但是一次執行5秒,就會導致A任務在長達5秒都不會得到執行機會。

2.Timer的執行周期時間依賴于系統時間,timer中,獲取到堆頂任務執行時間后,如果執行時間還沒到,會計算出需要休眠的時間=(執行時間-系統時間),如果系統時間被調整,就會導致休眠時間無限拉長,后面就算改回來了任務也因為在休眠中而得不到執行的機會。

以上就是動力節點java培訓機構的小編針對“Java編程入門,定時任務timer循環”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 狠狠综合久久久久综合小说网 | 激情在线视频 | 免费国产97久久青草 | 一级片视频免费观看 | 高清成人综合 | 草草草在线视频 | 人人做天天爱夜夜爽中字 | 久久国产精品免费观看 | 欧美色p| 九九久久久| 国产成人精品亚洲777图片 | 亚洲国产一区二区三区在线观看 | 九九色影院| 99久久久无码国产精品 | 日日夜夜精品视频 | 真实偷清晰对白在线视频 | 夜色私人影院永久地址入口 | 中文字幕视频在线免费观看 | 日本无翼乌全彩无遮挡动漫 | 国产激情视频在线 | 国产日韩亚洲欧洲一区二区三区 | 不卡一级aaa全黄毛片 | 亚洲国产人成中文幕一级二级 | 奇米影视在线 | 天天插天天插 | 麻豆亚洲精品一区二区 | 欧美国一级毛片片aa | 国产精品久久久久久久久鸭 | 久久ri精品高清一区二区三区 | 成人深夜网站 | 99久久99久久精品免费看蜜桃 | 2018天天操天天干 | 成年人视频黄色 | 中文字幕亚洲欧美日韩高清 | 天海翼精品久久中文字幕 | 欧美一级aⅴ毛片 | 成人免费一区二区三区在线观看 | 日本三级欧美三级 | 亚洲综合色网站 | 色婷婷精品综合久久狠狠 | 欧美日韩视频在线 |