Я пытаюсь выполнить код с задержкой в 1 секунду в моем сервлете Java. Мне нужно проверить условие, если отслеживание включено или выключено. Если он выключен, он переходит в другое и закрывает планировщик. Код как указано ниже.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 как «ложь», то теперь это значение не получает изменилось. Я не знаю, почему это происходит. Пожалуйста, помогите мне.
Флаг является локальным для этого метода, поэтому он будет меняться с каждым запросом. Кроме того, я думаю, что логика планирования/остановки задач должна быть в отдельном классе, а не в сервлете, и должна контролироваться переменной экземпляра. –
@ Darshan Mehta, если я создаю переменную экземпляра и делегирую задачу некоторому методу класса, он будет формировать новый объект для каждого запроса (один для поворота «на», а другой для отключения «выключен»). Мне нужно обработать функцию отключения для того же пользователя, который невозможен, если я создам объект и делегирую каждый раз. Надеюсь, ты понял. – Devs
@ DarshanMehta тоже я думал то же самое, но значение переменной не меняется. – Devs