Если вам действительно нужно сделать это многопоточным способом, я думаю, что не существует решений со значительно меньшими накладными расходами.
Однако, если все, что вам нужно, это отложенное выполнение, а не выполнение в разных потоках (например, для какого-либо моделирования), то, возможно, вы можете избавиться от накладных расходов на синхронизацию, выполнив все задачи, следовательно, в одном и том же потоке. Например, вы можете поместить свои задачи в PriorityQueue
, упорядоченные по времени выполнения, и создать цикл выполнения задач, который будет запускать первую задачу из очереди во время ее выполнения.