我一直在嘗試在我的java servlet中執行延遲1秒的代碼。如果跟蹤打開或關閉,我需要檢查條件。如果它關閉,則轉到其他位置並關閉調度程序。代碼如下。ScheduledExecutorService不顯示變量的變化
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Map m=request.getParameterMap();
Set s = m.entrySet();
Iterator it = s.iterator();
int index=0;
while(it.hasNext()){
Map.Entry<String,String[]> entry = (Map.Entry<String,String[]>)it.next();
String key = entry.getKey();
String[] value = entry.getValue();
System.out.println("Value is "+value[0].toString());
switch(key)
{
case "RegId":
RegId=value[0].toString();
break;
case "isTrackingRequested":
isTrackingRequested=Boolean.valueOf(value[0]);
break;
}
}
boolean isTrackingRequestednew=isTrackingRequested;
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// code to run
if(isTrackingRequestednew){
try {
System.out.println("===========================================================================");
System.out.println("new track status is "+isTrackingRequestednew);
System.out.println("===========================================================================");
}catch(Exception e)
{
}
}
else
{
ses.shutdown();
}
}
}, 0, 1, TimeUnit.SECONDS);
}
現在爲了停止跟蹤我的應用程序發送isTrackingRequestednew爲「假」,現在該值未得到改變的。我不知道爲什麼會這樣。請幫幫我。
該標誌對於此方法是本地的,因此它會隨着每個請求而改變。另外,我認爲計劃/停止任務的邏輯應該在一個單獨的類中,而不是在servlet中,並且應該由一個實例變量來控制。 –
@Darshan Mehta如果我創建實例變量並將任務委派給某個類方法,它將爲每個請求(一個用於打開「on」和另一個用於關閉)形成新對象。我需要爲同一個用戶處理關閉功能,如果我每次都創建對象和委託,這是不可能的。我希望你明白我的觀點。 – Devs
@DarshanMehta我也認爲同樣的事情,但變量的值不會改變。 – Devs