После некоторых острых комментариев я думаю, что начинаю понимать, что вы делаете, и похоже на шаблон Producer
/ Consumer
с небольшой модификацией. Исходя из нашего чата, теперь я понимаю, что вы хотите запустить потребителя по фиксированной ставке! Это должно дать вам представление (но использовать параллельную коллекцию в вашей реализации):
public FixedRateConsumer implements Runnable
{
private final object _lock = new object();
// *** use a concurrent collection here ***
private Queue<Runnable> _workQueue;
public FixedRateConsumer()
{
_workQueue = new Queue<Runnable>();
}
public scheduleTask(Runnable task)
{
synchronized(_lock)
{
_workQueue.put(task);
}
}
public void run()
{
synchronized(_lock)
{
while(_workQueue.poll()!=null)
{
_workQueue.take().run();
}
}
}
}
А теперь вам просто нужно запланировать запуск потребителя с фиксированной скоростью:
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
FixedRateConsumer consumer = new FixedRateConsumer();
scheduler.scheduleAtFixedRate(consumer, /*specify initial delay*/, /*specify rate*/, /*specify TimeUnit*/);
Ваш производитель может запланировать задачу следующим образом:
// Then you just schedule your tasks like this
consumer.scheduleTask(new Runnable());