У меня есть класс Runnable, который должен запускаться через заданный интервал с момента его последнего запуска.
Пример: ProcessThread запускается каждые 2 минуты после завершения. Так что, если я запускаю ProcessThread в 1:00, а это занимает 5 минут (заканчивается в 1:05), в следующий раз он будет запущен в 1:07. Если для этого требуется 3 минуты (до 1:10), то начинается с 1:12) и т. Д.
Я не могу установить его с фиксированной скоростью 2 минуты, потому что тогда будет запущен второй поток, а первый еще не закончен.
Итак, вот мой текущий код, но, как он у меня есть, он продолжает создавать потоки и никогда не заканчивает их ... так что со временем моя память растет и растет:
Main:
public class MyMain extends Thread{
public static void main(String[] args) {
ExecuteThread execute = new ExecuteThread();
execute.start();
}
}
ExecuteThread (я вынул try-catch):
public void run() {
MyProcessThread myProcess = new MyProcessThread();
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
myProcess.start();
while(myProcess.isAlive()){
sleep(10000);
}
scheduler.schedule(this,myProcess.getDelaySeconds(),TimeUnit.SECONDS);
}
Прежде чем я запустил планировщик внутри MyProcessThread, но это привело к тому же. Это выглядит как правильное направление, но что-то все еще не так.