[英]Force method run during specified interval of time
我想強制方法運行指定的時間。
public Response run(Request req){
//method runImpl must run during specified interval of time(for example for 10 secs)
Response res = runImpl(req);
return response;
}
最好的方法是什么?謝謝!
嘗試使用此:
poolExecutor = new ScheduledThreadPoolExecutor(1);
poolExecutor.scheduleAtFixedRate(
new YourRunable(), startFrom/*10*/, startEvery/*5*/, TimeUnit.SECONDS);
runImpl應該返回一個布爾值,此代碼才能正常工作。 如果您不希望程序在完成之前停滯不前,則可能需要在新的線程中使用它(大量的基礎教程)。
public Response run(Request req){
long lasttime=Sys.getTime();
int i=0;
while(i<10){
if(Response res = runImpl(req);){
return response;
}
if((Sys.getTime-lasttime)>1000){
i++;
lasttime=Sys.getTime();
}
}
return null;
這會在每個處理器時刻運行,如果您希望它以10秒的間隔運行,請使用:
public Response run(Request req){
long lasttime=Sys.getTime();
int i=0;
for(int i; i<(10000/yourchoiceinterval); i++){
if(Response res = runImpl(req);){
return response;
}
if((Sys.getTime-lasttime)>1000){
lasttime=Sys.getTime();
}
}
return null;
最好的方法是將您的工作分成適當大小的塊,因此每個塊可以在1秒內完成。 這樣,在每個塊的末尾,您可以檢查時間是否已到。
如果您的工作涉及可能無限期地阻塞的I / O工作,請嘗試使用可中斷方法(可以通過調用Thread.interrupt()
來中斷)或接受調用方明確的最大運行時間的方法。
或者,您可以將I / O工作委托給某個專用線程,並在單獨的線程中檢查其進度,並在超過運行時間時采取適當的措施。
您可以啟動一個僅調用您的方法的新線程,並在創建的計時器到期后使其進入睡眠狀態。 這樣,雖然您不能保證在掛起之前方法循環已經完成,但是可以完成技巧而不必修改方法。 為了實現周期,只需將這種睡眠邏輯放在線程循環中即可。 只記得喚醒線程
由於您的解釋不夠清楚,可能會有數十種實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.