国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
quartz詳解4:quartz線程管理
http://blog.itpub.net/11627468/viewspace-1766967/
quartz啟動后有多個線程同時在跑。啟動時會啟動主線程、集群線程、檢漏線程、工作線程。主線程負(fù)責(zé)查詢到需要觸發(fā)的線程,并放入到線程隊(duì)列。
集群線程負(fù)責(zé)集群、檢漏線程負(fù)責(zé)對未成功執(zhí)行的任務(wù)進(jìn)行檢漏。工作線程默認(rèn)是20,一般PC服務(wù)器可以調(diào)到200。
一、主線程QuartzScheduleThread
關(guān)于QuartzScheduleThread是quartz啟動時開始啟動,用于trigger的獲取、觸發(fā),并放入到線程池中執(zhí)行。
詳細(xì)可以看quartz詳解2:quartz由淺入深 第4章
詳細(xì)流程如下:
關(guān)于quartz2.0版本之后可以批量執(zhí)行trigger的功能。要測試是否影響定時的準(zhǔn)確度。
二、線程池SimpleThreadPool
線程池的初使化:new 線程并放入線程池的鏈表中。
執(zhí)行線程:把任務(wù)放到一個線程中執(zhí)行。
線程結(jié)束:修改線程狀態(tài)。
線程池關(guān)閉:每個線程關(guān)閉,正在執(zhí)行的線程等線程執(zhí)行完了再關(guān)閉。
三、工作線程WorkThread
線程池中執(zhí)行的工作線程,可以通過配置文件quartz.properties來配置大?。?div style="height:15px;">
JobRunShell實(shí)現(xiàn)runnable接口,放入到workThread下執(zhí)行:
四、集群線程ClusterManager和檢漏線程MisfireHandler
可以看到quartz啟動時,這兩個線程也啟動了。
那么,它是在什么時候啟動的呢?是在執(zhí)行QuartzScheduler的start()方法時在JobStore類上加載的。
再來分析下,這兩個線程的作用。
這兩個線程都有initialize,manage,run,shutdown方法。
--1、先看ClusterManager,在new ClusterManger后,就會觸發(fā)initialize方法,initialize方法再調(diào)用manager方法。
run方法的代碼:
點(diǎn)擊(此處)折疊或打開
public void run() {
while (!shutdown) {
if (!shutdown) {
long timeToSleep = getClusterCheckinInterval();
long transpiredTime = (System.currentTimeMillis() - lastCheckin);
timeToSleep = timeToSleep - transpiredTime;
if (timeToSleep <= 0) {
timeToSleep = 100L;
}
if(numFails > 0) {
timeToSleep = Math.max(getDbRetryInterval(), timeToSleep);
}
try {
Thread.sleep(timeToSleep);
} catch (Exception ignore) {
}
}
if (!shutdown && this.manage()) {
signalSchedulingChangeImmediately(0L);
}
}//while !shutdown
}
private long clusterCheckinInterval = 7500L;   //默認(rèn)7.5秒執(zhí)行一次集群的manage。
而集群的manager做的事情是判斷是否有節(jié)點(diǎn)down掉,同時每7.5秒發(fā)送同步心跳修改數(shù)據(jù)庫信息。
LAST_CHECKIN_TIME每7.5秒會更新一次。
--2、再看MisfireHandler的作用:
run方法默認(rèn)每15秒執(zhí)行一次。如果沒有misfire的話,則每60秒執(zhí)行一次。
manager邏輯如下:
private long misfireThreshold = 60000L;   //默認(rèn)時間超過了1分鐘。
就是把超過1分鐘還沒執(zhí)行的任務(wù),認(rèn)為是misfire,然后保存到trigger表,等待重新再執(zhí)行。
有狀態(tài)的job如果第一次沒有執(zhí)行完,第二次執(zhí)行的時間錯過了,就會被認(rèn)為是misfire
doUpdateOfMisfiredTrigger調(diào)用CronTriggerImpl的updateAfterMisfire方法。
如果misfire設(shè)置為MISFIRE_INSTRUCTION_SMART_POLICY或MISFIRE_INSTRUCTION_FIRE_ONCE_NOW就是馬上執(zhí)行。
如果misfire設(shè)置為MISFIRE_INSTRUCTION_DO_NOTHING則在下一個周期再執(zhí)行。
默認(rèn)是:MISFIRE_INSTRUCTION_SMART_POLICY
可以通過trigger的build方法增加參數(shù)實(shí)現(xiàn):
withMisfireHandlingInstructionFireAndProceed().build()
withMisfireHandlingInstructionDoNothing().build()
五、總結(jié):
從線程角度來分析集群的性能的話,主要是:
1、主線程QuartzScheduleThread的瓶頸很可能出現(xiàn)在數(shù)據(jù)庫行鎖。
--可以考慮定時任務(wù)數(shù)據(jù)保存在分布式緩存。減少對數(shù)據(jù)庫的過分依賴。
2、工作線程WorkThread的瓶頸很可能出現(xiàn)在任務(wù)的阻塞。
--可以通過用異步任務(wù)來解析,異步任務(wù)如何放在數(shù)據(jù)庫有性能問題可以再考慮分布式緩存。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Quartz.net官方開發(fā)指南 第十一課: 高級(企業(yè)級)屬性 - 自由、創(chuàng)新、研究、探索 - 博客園
Quartz應(yīng)用與集群原理分析
Quartz學(xué)習(xí)
阿里P8架構(gòu)師談:Quartz調(diào)度框架詳解、運(yùn)用場景、與集群部署實(shí)踐 優(yōu)知學(xué)院
線程負(fù)載均衡算法之一(memorycachedshiy使用)
Quartz框架(二)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服