亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? quartzschedulerthread.java

?? Java中非常實用流控制工具
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
                    }

                    if (trigger != null) {

                        now = System.currentTimeMillis();
                        long triggerTime = trigger.getNextFireTime().getTime();
                        long timeUntilTrigger = triggerTime - now;
                        while(timeUntilTrigger > 0) {
	                        synchronized(sigLock) {
		                        try {
		                        	// we could have blocked a long while
		                        	// on 'synchronize', so we must recompute
		                        	now = System.currentTimeMillis();
		                            timeUntilTrigger = triggerTime - now;
		                            if(timeUntilTrigger > 1)
		                            	sigLock.wait(timeUntilTrigger);
		                        } catch (InterruptedException ignore) {
		                        }
	                        }		                        
	                        if (isScheduleChanged()) {
	                        	if(isCandidateNewTimeEarlierWithinReason(triggerTime)) {
	                        		// above call does a clearSignaledSchedulingChange()
	                        		try {
		                                qsRsrcs.getJobStore().releaseAcquiredTrigger(
		                                        ctxt, trigger);
		                            } catch (JobPersistenceException jpe) {
		                                qs.notifySchedulerListenersError(
		                                        "An error occured while releasing trigger '"
		                                                + trigger.getFullName() + "'",
		                                        jpe);
		                                // db connection must have failed... keep
		                                // retrying until it's up...
		                                releaseTriggerRetryLoop(trigger);
		                            } catch (RuntimeException e) {
		                                getLog().error(
		                                    "releaseTriggerRetryLoop: RuntimeException "
		                                    +e.getMessage(), e);
		                                // db connection must have failed... keep
		                                // retrying until it's up...
		                                releaseTriggerRetryLoop(trigger);
		                            }
		                            trigger = null;
		                            break;
	                        	}
	                        }
	                        now = System.currentTimeMillis();
	                        timeUntilTrigger = triggerTime - now;
                        }
                        if(trigger == null)
                        	continue;
                        
                        // set trigger to 'executing'
                        TriggerFiredBundle bndle = null;

                        boolean goAhead = true;
                        synchronized(sigLock) {
                        	goAhead = !halted;
                        }
                        if(goAhead) {
                            try {
                                bndle = qsRsrcs.getJobStore().triggerFired(ctxt,
                                        trigger);
                            } catch (SchedulerException se) {
                                qs.notifySchedulerListenersError(
                                        "An error occured while firing trigger '"
                                                + trigger.getFullName() + "'", se);
                            } catch (RuntimeException e) {
                                getLog().error(
                                    "RuntimeException while firing trigger " +
                                    trigger.getFullName(), e);
                                // db connection must have failed... keep
                                // retrying until it's up...
                                releaseTriggerRetryLoop(trigger);
                            }
                        }
                        
                        // it's possible to get 'null' if the trigger was paused,
                        // blocked, or other similar occurrences that prevent it being
                        // fired at this time...  or if the scheduler was shutdown (halted)
                        if (bndle == null) {
                            try {
                                qsRsrcs.getJobStore().releaseAcquiredTrigger(ctxt,
                                        trigger);
                            } catch (SchedulerException se) {
                                qs.notifySchedulerListenersError(
                                        "An error occured while releasing trigger '"
                                                + trigger.getFullName() + "'", se);
                                // db connection must have failed... keep retrying
                                // until it's up...
                                releaseTriggerRetryLoop(trigger);
                            }
                            continue;
                        }

                        // TODO: improvements:
                        //
                        // 2- make sure we can get a job runshell before firing trigger, or
                        //   don't let that throw an exception (right now it never does,
                        //   but the signature says it can).
                        // 3- acquire more triggers at a time (based on num threads available?)


                        JobRunShell shell = null;
                        try {
                            shell = qsRsrcs.getJobRunShellFactory().borrowJobRunShell();
                            shell.initialize(qs, bndle);
                        } catch (SchedulerException se) {
                            try {
                                qsRsrcs.getJobStore().triggeredJobComplete(ctxt,
                                        trigger, bndle.getJobDetail(), Trigger.INSTRUCTION_SET_ALL_JOB_TRIGGERS_ERROR);
                            } catch (SchedulerException se2) {
                                qs.notifySchedulerListenersError(
                                        "An error occured while placing job's triggers in error state '"
                                                + trigger.getFullName() + "'", se2);
                                // db connection must have failed... keep retrying
                                // until it's up...
                                errorTriggerRetryLoop(bndle);
                            }
                            continue;
                        }

                        if (qsRsrcs.getThreadPool().runInThread(shell) == false) {
                            try {
                                // this case should never happen, as it is indicative of the
                                // scheduler being shutdown or a bug in the thread pool or
                                // a thread pool being used concurrently - which the docs
                                // say not to do...
                                getLog().error("ThreadPool.runInThread() return false!");
                                qsRsrcs.getJobStore().triggeredJobComplete(ctxt,
                                        trigger, bndle.getJobDetail(), Trigger.INSTRUCTION_SET_ALL_JOB_TRIGGERS_ERROR);
                            } catch (SchedulerException se2) {
                                qs.notifySchedulerListenersError(
                                        "An error occured while placing job's triggers in error state '"
                                                + trigger.getFullName() + "'", se2);
                                // db connection must have failed... keep retrying
                                // until it's up...
                                releaseTriggerRetryLoop(trigger);
                            }
                        }

                        continue;
                    }
                } else { // if(availTreadCount > 0)
                    continue; // should never happen, if threadPool.blockForAvailableThreads() follows contract
                }

                long now = System.currentTimeMillis();
                long waitTime = now + getRandomizedIdleWaitTime();
                long timeUntilContinue = waitTime - now;
                synchronized(sigLock) {
                	try {
						sigLock.wait(timeUntilContinue);
					} catch (InterruptedException ignore) {
					}
                }

            } catch(RuntimeException re) {
                getLog().error("Runtime error occured in main trigger firing loop.", re);
            }
        } // loop...

        // drop references to scheduler stuff to aid garbage collection...
        qs = null;
        qsRsrcs = null;
    }

    private boolean isCandidateNewTimeEarlierWithinReason(long oldTime) {
    	
		// So here's the deal: We know due to being signaled that 'the schedule'
		// has changed.  We may know (if getSignaledNextFireTime() != 0) the
		// new earliest fire time.  We may not (in which case we will assume
		// that the new time is earlier than the trigger we have acquired).
		// In either case, we only want to abandon our acquired trigger and
		// go looking for a new one if "it's worth it".  It's only worth it if
		// the time cost incurred to abandon the trigger and acquire a new one 
		// is less than the time until the currently acquired trigger will fire,
		// otherwise we're just "thrashing" the job store (e.g. database).
		//
		// So the question becomes when is it "worth it"?  This will depend on
		// the job store implementation (and of course the particular database
		// or whatever behind it).  Ideally we would depend on the job store 
		// implementation to tell us the amount of time in which it "thinks"
		// it can abandon the acquired trigger and acquire a new one.  However
		// we have no current facility for having it tell us that, so we make
		// a somewhat educated but arbitrary guess ;-).

    	synchronized(sigLock) {
			
			boolean earlier = false;
			
			if(getSignaledNextFireTime() == 0)
				earlier = true;
			else if(getSignaledNextFireTime() < oldTime )
				earlier = true;
			
			if(earlier) {
				// so the new time is considered earlier, but is it enough earlier?
				// le
				long diff = oldTime - System.currentTimeMillis();
				if(diff < (qsRsrcs.getJobStore().supportsPersistence() ? 80L : 7L))
					earlier = false;
			}
			
			clearSignaledSchedulingChange();
			
			return earlier;
        }
	}

	public void errorTriggerRetryLoop(TriggerFiredBundle bndle) {
        int retryCount = 0;
        try {
            while (!halted) {
                try {
                    Thread.sleep(getDbFailureRetryInterval()); // retry every N
                    // seconds (the db
                    // connection must
                    // be failed)
                    retryCount++;
                    qsRsrcs.getJobStore().triggeredJobComplete(ctxt,
                            bndle.getTrigger(), bndle.getJobDetail(), Trigger.INSTRUCTION_SET_ALL_JOB_TRIGGERS_ERROR);
                    retryCount = 0;
                    break;
                } catch (JobPersistenceException jpe) {
                    if(retryCount % 4 == 0) {
                        qs.notifySchedulerListenersError(
                            "An error occured while releasing trigger '"
                                    + bndle.getTrigger().getFullName() + "'", jpe);
                    }
                } catch (RuntimeException e) {
                    getLog().error("releaseTriggerRetryLoop: RuntimeException "+e.getMessage(), e);
                } catch (InterruptedException e) {
                    getLog().error("releaseTriggerRetryLoop: InterruptedException "+e.getMessage(), e);
                }
            }
        } finally {
            if(retryCount == 0) {
                getLog().info("releaseTriggerRetryLoop: connection restored.");
            }
        }
    }
    
    public void releaseTriggerRetryLoop(Trigger trigger) {
        int retryCount = 0;
        try {
            while (!halted) {
                try {
                    Thread.sleep(getDbFailureRetryInterval()); // retry every N
                    // seconds (the db
                    // connection must
                    // be failed)
                    retryCount++;
                    qsRsrcs.getJobStore().releaseAcquiredTrigger(ctxt, trigger);
                    retryCount = 0;
                    break;
                } catch (JobPersistenceException jpe) {
                    if(retryCount % 4 == 0) {
                        qs.notifySchedulerListenersError(
                            "An error occured while releasing trigger '"
                                    + trigger.getFullName() + "'", jpe);
                    }
                } catch (RuntimeException e) {
                    getLog().error("releaseTriggerRetryLoop: RuntimeException "+e.getMessage(), e);
                } catch (InterruptedException e) {
                    getLog().error("releaseTriggerRetryLoop: InterruptedException "+e.getMessage(), e);
                }
            }
        } finally {
            if(retryCount == 0) {
                getLog().info("releaseTriggerRetryLoop: connection restored.");
            }
        }
    }
    
    public Log getLog() {
        return log;
    }

} // end of QuartzSchedulerThread

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品综合一本久道在线视频| 色婷婷综合在线| 亚洲精品你懂的| 2017欧美狠狠色| 欧美蜜桃一区二区三区| 成人免费观看男女羞羞视频| 丝袜国产日韩另类美女| 亚洲欧美另类在线| 国产午夜亚洲精品理论片色戒| 欧美日韩高清在线| 91在线精品一区二区| 国产毛片精品国产一区二区三区| 亚洲不卡在线观看| 亚洲品质自拍视频网站| 亚洲国产精品传媒在线观看| 欧美一区二区精品在线| 在线这里只有精品| 97精品电影院| 成人免费视频app| 国产黄色精品网站| 精品综合免费视频观看| 丝袜诱惑制服诱惑色一区在线观看| 国产精品你懂的| 国产日韩av一区| 久久精品夜夜夜夜久久| 日韩精品一区二区三区蜜臀 | 午夜视频一区二区| 国产精品女同一区二区三区| 久久精品人人做人人综合| 日韩视频在线一区二区| 91精品国产日韩91久久久久久| 欧日韩精品视频| 色香蕉久久蜜桃| 欧美在线你懂的| 91福利在线观看| 欧美性高清videossexo| 在线日韩一区二区| 在线观看欧美日本| 欧美视频三区在线播放| 欧美少妇一区二区| 欧美精品乱码久久久久久| 欧美乱熟臀69xxxxxx| 欧美精品 日韩| 欧美一区二区三区视频免费播放| 欧美一区三区二区| 日韩欧美中文字幕一区| 精品久久久久久久久久久院品网| 日韩一级高清毛片| xnxx国产精品| 国产欧美综合在线观看第十页| 中文字幕不卡在线观看| 国产精品卡一卡二卡三| 亚洲精选一二三| 五月天网站亚洲| 麻豆成人91精品二区三区| 激情小说欧美图片| 成人免费高清视频| 91美女福利视频| 欧美另类一区二区三区| 日韩三级视频在线观看| 国产亚洲欧美一区在线观看| 国产精品国产三级国产aⅴ中文| 亚洲精品亚洲人成人网在线播放| 亚洲国产精品一区二区久久恐怖片 | 日韩理论片一区二区| 亚洲视频一区二区在线观看| 亚洲午夜一区二区| 蜜桃精品视频在线| 成人免费看的视频| 欧美日韩视频在线一区二区| 日韩欧美黄色影院| 国产精品五月天| 亚洲国产wwwccc36天堂| 老司机精品视频在线| 成人免费的视频| 制服丝袜在线91| 国产亚洲精品久| 亚洲va欧美va人人爽| 国产激情偷乱视频一区二区三区| 色综合 综合色| 精品国产一区二区亚洲人成毛片 | 东方欧美亚洲色图在线| 在线视频中文字幕一区二区| 日韩一级免费观看| 日本一区二区三区在线观看| 亚洲国产色一区| 国产盗摄精品一区二区三区在线| 欧美在线看片a免费观看| 精品入口麻豆88视频| 亚洲精品欧美综合四区| 国产在线精品一区在线观看麻豆| 91色视频在线| 久久久亚洲精品石原莉奈| 亚洲国产欧美一区二区三区丁香婷| 国产一区不卡精品| 欧美卡1卡2卡| 亚洲视频狠狠干| 国产成人自拍网| 日韩一区二区免费电影| 亚洲欧美一区二区久久| 国产一区二区三区四区五区美女| 欧美日韩高清不卡| 1024精品合集| 成人午夜在线视频| 精品国产一区二区精华| 天天爽夜夜爽夜夜爽精品视频| 91小视频在线观看| 国产欧美一区二区三区网站 | 国产精品一区免费在线观看| 欧美日韩日日夜夜| 亚洲青青青在线视频| 成人晚上爱看视频| 精品对白一区国产伦| 日韩一区精品视频| 欧美日本不卡视频| 亚洲一区视频在线观看视频| www.亚洲精品| 国产嫩草影院久久久久| 极品少妇一区二区| 欧美电影免费提供在线观看| 午夜天堂影视香蕉久久| 色噜噜狠狠成人中文综合| 欧美国产97人人爽人人喊| 国产精品夜夜嗨| 精品国产a毛片| 久久99精品国产麻豆不卡| 日韩欧美亚洲另类制服综合在线| 一区二区在线观看免费| 一道本成人在线| 亚洲精品五月天| 91久久免费观看| 亚洲欧美一区二区三区孕妇| 不卡av在线免费观看| 国产精品素人一区二区| 成人aaaa免费全部观看| 国产精品午夜久久| 波多野结衣中文字幕一区| 国产精品污网站| 91视频www| 亚洲自拍与偷拍| 欧美日韩国产精品成人| 日本视频一区二区三区| 日韩午夜激情免费电影| 九色综合狠狠综合久久| 精品国产伦一区二区三区免费 | 一区二区在线观看视频在线观看| 色婷婷综合中文久久一本| 亚洲午夜久久久久久久久久久| 欧美三级一区二区| 日本不卡一二三| 欧美精品一区二区高清在线观看| 国产精品中文字幕日韩精品| 国产欧美一区二区三区沐欲| 99视频在线精品| 午夜天堂影视香蕉久久| 欧美videofree性高清杂交| 国产麻豆日韩欧美久久| 国产精品午夜在线| 91国产视频在线观看| 日本美女一区二区三区视频| www国产成人| 91丨porny丨在线| 秋霞国产午夜精品免费视频| 精品欧美一区二区三区精品久久 | 日产欧产美韩系列久久99| 日韩美一区二区三区| 国产成人亚洲精品青草天美| 亚洲精品久久久蜜桃| 制服丝袜亚洲网站| 国产91精品一区二区麻豆网站| 亚洲色图第一区| 欧美日韩激情一区二区三区| 久久99国产精品久久| 综合av第一页| 欧美一区二区黄| 成人午夜免费av| 午夜国产精品影院在线观看| 久久久五月婷婷| 欧美日韩激情一区| 国产 日韩 欧美大片| 亚洲成人精品影院| 国产欧美日韩精品a在线观看| 欧美图片一区二区三区| 国产在线播放一区| 亚洲va天堂va国产va久| 国产精品美女久久久久久久久久久| 欧美日本韩国一区| av一区二区三区黑人| 麻豆国产欧美日韩综合精品二区| 自拍偷拍亚洲综合| 精品嫩草影院久久| 欧美日韩久久一区| 国产91精品一区二区麻豆网站| 首页国产欧美日韩丝袜| 亚洲丝袜制服诱惑| 久久综合久久99| 这里只有精品电影| 欧洲精品中文字幕| a美女胸又www黄视频久久| 国内精品在线播放|