Возьмите ScheduledThreadPoolExecutor, как показано ниже.Как вы предоставляете самому исполнителю временное окно, в котором он может запускать новые потоки.За пределами этого временного окна он должен прекратить запуск новых потоков с фиксированной скоростью.
executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable(){}, 0, 1, TimeUnit.DAYS);
Например, 1
if executor has run for <= 1s stop launching thread
if executor has run for > 1s and < 3s. Start and keep launching thread
if executor has run for < 3s stop launching thread.
В качестве альтернативы, если исполнителю может быть предоставлентайм-аут, который также будет работать.Заметьте, я не говорю о том, чтобы дать потоку тайм-аут, но сам исполнитель.
У меня есть одно решение - добавить трекер времени в сам поток, но мне интересно, есть ли более нативные способы сделать это.