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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java基礎(chǔ)學(xué)習(xí):java定時(shí)器的實(shí)現(xiàn)

Java基礎(chǔ)學(xué)習(xí):java定時(shí)器的實(shí)現(xiàn)

更新時(shí)間:2020-04-01 15:07:12 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2211次


  一、定時(shí)器:


  顧名思義,定時(shí)器是定時(shí)執(zhí)行的任務(wù)。定時(shí)器的應(yīng)用場(chǎng)景很廣,比方說,定時(shí)更新排行榜的用戶信息、定時(shí)刷新首頁列表數(shù)據(jù)到緩存等等


  二、Java中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式


  1、原生態(tài)Timer,優(yōu)點(diǎn)是方便快速,缺點(diǎn)是每一個(gè)任務(wù)都需要占用一個(gè)線程資源,而且任務(wù)拋異常出去后,定時(shí)任務(wù)下次就不會(huì)在執(zhí)行了


  2、ScheduledExecutorService,這是Java5以后提供的一個(gè)類,可以很方便的實(shí)現(xiàn)定時(shí)調(diào)度。


  ScheduledExecutorService service = Executors.newScheduledThreadPool(5); // 創(chuàng)建調(diào)度服務(wù),線程池?cái)?shù)量為5


  service .scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit); // 開啟調(diào)度,command是所要執(zhí)行的任務(wù),initialDelay是初始化延時(shí)時(shí)間,period是調(diào)度周期,unit是時(shí)間單位


  3、Spring提供的定時(shí)器,例如,以下例子是每一分鐘執(zhí)行一次的任務(wù)


  @Scheduled(cron = "0 */1 * * * ?")


  public void updateXxx(){ ... }


  這種方式很方便,而且也是基于線程池的方式,數(shù)量可以通過xml配置。如果項(xiàng)目中有很多定時(shí)任務(wù),那么就需要相對(duì)應(yīng)的調(diào)大線程池?cái)?shù)量,不然就得排隊(duì)了。


  三、分布式定時(shí)器所遇到的問題


  分布式定時(shí)器:簡單理解就是多個(gè)定時(shí)器同時(shí)部署,定時(shí)器中的各個(gè)任務(wù)相互協(xié)作


  可能遇到的問題(包括但不限于此):


  1、如何保證多個(gè)定時(shí)器中同一個(gè)任務(wù)只有一個(gè)在執(zhí)行


  2、如何避免死鎖


  3、另一個(gè)詭異的問題是,明明已經(jīng)加鎖了,但還是被重復(fù)執(zhí)行了


  四、解決方案


  多個(gè)定時(shí)器中的同一個(gè)任務(wù)只有一個(gè)在執(zhí)行。這個(gè)時(shí)候光靠Java本身提供的鎖機(jī)制是沒辦法實(shí)現(xiàn)的,需要借助第三方的力量,這里使用的是Redis,因?yàn)樗咝В阅芎谩喂?jié)點(diǎn)支持qps已經(jīng)超過了1萬,所以性能是非常高的。其中用到的是Redis的set命令。


  原型是:SET key value [EX seconds] [PX milliseconds] [NX|XX]


  EX second :設(shè)置鍵的過期時(shí)間為 second 秒。


  PX millisecond :設(shè)置鍵的過期時(shí)間為 millisecond 毫秒。


  NX :只在鍵不存在時(shí),才對(duì)鍵進(jìn)行設(shè)置操作。


  XX :只在鍵已經(jīng)存在時(shí),才對(duì)鍵進(jìn)行設(shè)置操作。


  例子:


  set mylock 192.168.1.100 EX 5 NX


  上邊的例子中設(shè)置key為mylock,value為192.168.1.100,EX 5表示過期時(shí)間為5秒鐘,NX表示當(dāng)key不存在的時(shí)候再設(shè)置。這里為什么要把value設(shè)置為IP呢,原因是可以追蹤是誰占有著這把鎖。


  設(shè)置成功時(shí)返回OK,失敗則返回nil,利用這個(gè)特性就可以實(shí)現(xiàn)分布式鎖了。其中設(shè)置5秒的過期時(shí)間可以避免死鎖的發(fā)生


Java基礎(chǔ)學(xué)習(xí):java定時(shí)器的實(shí)現(xiàn)


  以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java定時(shí)器的實(shí)現(xiàn)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 中文在线1区二区六区 | 久久频这里精品99香蕉久 | 亚洲九九色 | 韩国色三级伦不卡高清在线观看 | 999yy成年在线视频免费看 | 青青草久草视频 | 国产精品免费视频播放 | 久久久久久国产精品免费免 | 在线视频不卡国产在线视频不卡 | 欧美精品成人一区二区视频一 | 久久永久免费视频 | 国产专区在线 | 日本一级大黄毛片免费基地 | 日韩精品一区二区三区中文字幕 | 四虎影视库国产精品一区 | 亚洲欧美日韩精品高清 | 久久久久久噜噜噜久久久精品 | 老司机福利深夜亚洲入口 | 色狠狠狠狠综合影视 | 成年女人免费看 | 欧美一级免费大片 | 狠狠色欧美亚洲综合色黑a 狠狠色视频 | 国产精品一区二区三区久久 | 亚洲精品一区二区三区美女 | 亚洲人成影院午夜网站 | 九九九精品视频免费 | 青青青精品免费视频 | 亚洲精品第四页中文字幕 | 九九热精品免费视频 | 国产精品久久国产三级国电话系列 | 欧美日韩综合精品一区二区三区 | 精品日产一区二区 | 久久精品成人免费看 | 中文字幕亚洲综合 | 国产成人免费视频 | 欧美成人精品高清在线播放 | 欧美性另类69xxxx极品 | 国产一区二区三区欧美精品 | 五月婷婷综合激情 | 在线观看日本人免费视频色 | 亚洲区精品久久一区二区三区 |