簡體   English   中英

強制方法在指定的時間間隔內運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM