2017-01-13 2 views
0

Я хочу выполнить некоторые временные задачи, используя ScheduledExecutorService, но временные интервалы меняются. Я пытаюсь перенести задачу, прежде чем он закончил:Безопасно ли перенести задачу перед ее выполнением при использовании ScheduledExecutorService?

import java.io.IOException; 
import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 
import java.util.concurrent.TimeUnit; 

public class Test { 
    public static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); 
    public static int interval = 1; 

    public static void main(String[] args) throws IOException { 
     Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       System.out.println(System.currentTimeMillis()/1000); 
       interval += 1; 
       scheduledExecutorService.schedule(this, interval, TimeUnit.SECONDS); 
      } 
     }; 
     scheduledExecutorService.schedule(runnable, interval, TimeUnit.SECONDS); 
    } 
} 

Но я никогда не нашел никого, делать временные задачи, используя ScheduledExecutorService как это, интересно ли это безопасно.

+1

Как написано, этот код ничего не сделает. –

+0

Даже если вы запустите «runnable», то, что у вас здесь, не требует перенастройки задачи, у него есть график каждой задачи, когда он заканчивается. Что вы на самом деле пытаетесь сделать здесь? – azurefrog

+0

@azurefrog, я хочу запустить задачу синхронизации после 'delay1', когда задача будет выполнена, я заново запустим задачу после delay2, а' delay1' не будет равно 'delay2'. Так продолжайте. – expoter

ответ

1

До тех пор, пока вы используете метод schedule, который выполняет задачу только один раз, нет ничего плохого в этом подходе, он будет только перераспределять на каждой итерации ту же задачу с другой задержкой. Для планировщика это будет рассматриваться как новая задача, запланированная на каждой итерации, не более того.

Смежные вопросы