完全二叉樹:只有最后一層節(jié)點數(shù)不滿
堆:是一顆完全二叉樹,元素滿足每個節(jié)點的值都大于或者小于其父節(jié)點的值
數(shù)組存儲結(jié)構(gòu):
小頂堆:最上面的最小
更好的找到父節(jié)點是誰,除以2
插入元素、刪除元素
缺點:插入和刪除要移動比較全部的元素,需要耗費大量性能浪費
適合比較偏小量的
鏈表或者數(shù)組實現(xiàn)時間輪:遍歷數(shù)組,每個下標(biāo)放置一個鏈表,鏈表節(jié)點放置任務(wù),遍歷到了就取出執(zhí)行
round型時間輪:任務(wù)上記錄一個round,遍歷到了就將round減一,為0時取出執(zhí)行
缺點:需要遍歷所有的任務(wù),效率較低
分層時間輪:使用多個不同時間維度的輪。天輪記錄幾點執(zhí)行。月輪記錄幾號執(zhí)行。月輪遍歷到了。將任務(wù)取出放到天輪里面,即可實現(xiàn)幾號幾點執(zhí)行。
Timer:任務(wù)啟動:new()、任務(wù)添加:.schedule()
小頂堆里面添加任務(wù)、從小頂堆里獲取最近的任務(wù)、獲取當(dāng)前時間和這個任務(wù)下一次要執(zhí)行的時間,若、要把任務(wù)刪除掉重新入隊、預(yù)設(shè)的時間,任務(wù)真正執(zhí)行時間取決于上一個任務(wù)執(zhí)行完的時間
scheduleAtFixRate():
TimerTask:寫業(yè)務(wù)邏輯、再啟動線程池去執(zhí)行
單線程:任務(wù)阻塞、任務(wù)超時
ScheduledExecutorService scheduledThreadPool = Excutors.newScheduledThreadPool()
scheduleAtFixedRate
避免沒必要的喚醒和阻塞操作,更有效,更節(jié)省資源
定時任務(wù)框架Quartz quartz demoJob:業(yè)務(wù)邏輯
-JobBuilder、JobDataMap
execute()
JobDetail:Job的包裝
JobBuilder.newJob().withIdentity().build()
Trigger:觸發(fā)器
-TriggerBuilder 、JobDataMap、ScheduleBuilder simple、
.startNow()
.withSchedule()
Scheduler:按照觸發(fā)器定義的時間去執(zhí)行Job
-SchedulerFactory:StdSchedulerFactory properties配置
.shcheduleJob(jobDetail,triggerr)
存儲一些變量
job并發(fā)及持久化Scheduler每次執(zhí)行,都會根據(jù)JobDetail創(chuàng)建一個新的Job實例,這樣就可以規(guī)避并發(fā)訪問的問題
@DisallowConcurrentExecution:禁止并發(fā)地執(zhí)行同一個job定義的多個實例
前一個任務(wù)執(zhí)行完了,才會執(zhí)行下一個任務(wù)
@PersistJobDataAfterExecution: 將JobDataMap進行持久化
觸發(fā)器優(yōu)先級:同時觸發(fā)的比較優(yōu)先級
錯過觸發(fā):到達觸發(fā)時間時沒有被執(zhí)行、可以配置延遲的閾值
simple:
cron:
JobStore
默認(rèn)存儲在內(nèi)存中
集群處理。每個節(jié)點執(zhí)行一些任務(wù)
節(jié)點間互相不通信,通過數(shù)據(jù)庫來
quartz.properties
QRTZ
配置文件、建表語句
QuartzJobBean
executeInternal(JobExecutionContext context)
SchedulerConfig
Scheduler按照配置文件創(chuàng)建調(diào)度器
@Bean
Scheduler scheduler()
@Bean
SchedulerFactoryBean
factory.setSchedulerName(“”)
factory.setDataSource()
factory.setApplicationContextSchedulerContextKey(“applicaiton”)
factory.setQuartzProperties(quartzProperties())
factory.setTaskExecutor(schedulerThreadPool())
factory.setStarter
@Bean
DataSource
@Bean
Executor schedulerThreadPool{
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor
executor.setCorePoolSize
executor.setMaxPoolSize
executor.setQueue
@Bean
Properties quartzProperties()
PropertiesFactoryBean propertiesFactoryBean
propertiesFactoryBean.setLocation(new ClassPathResource(“quartz.properties”))
propertiesFactoryBean.afterpeopertiesSet()
return propertiesFactoryBean.getObject
通過監(jiān)聽器啟動調(diào)度
StarterApplocationListener implements ApplicationListener()
@Autowired
Scheduler
IOC容器啟動起來以后啟動調(diào)度
onApplicationEvent(ContextRefreshedEvent event){
TriggerKey triggerKey=TriggerKey.triggerKey()
scheduler.getTrigger(triggerKey);
if(trigger == null) {
trigger=TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.withSchedule(CronScheduleBuiler.cronSchedule(“0/10 * * * * ?”))
.build();
JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class)
.withIdentity()
.build()
scheduler.scheduleJob(jobDetail,trigger);
sheduler.start();
}
@SpringBootApplication
數(shù)據(jù)庫里存儲了一些歷史數(shù)據(jù)
一個JobDetail在一個節(jié)點
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:Java定時任務(wù)-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article38/hodpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)站排名、企業(yè)網(wǎng)站制作、動態(tài)網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)