Какой механизм я бы использовал для планирования рабочего элемента на определенное время?
Я бы использовал java.util.concurrent.ScheduledExecutorService.
Если рабочий элемент - это событие, отправленное актеру, как я могу убедиться, что пул вспомогательных потоков больше, чем количество элементов, которые могут быть заблокированы одновременно
Это кажется мне дизайном, который побеждает усилие распараллеливания. Попробуйте минимизировать или устранить блокировку и глобальное состояние. Это барьеры для компоновки и масштабируемости. Например, рассмотрим наличие отдельного выделенного потока, который ожидает поступления файлов и затем запускает события для участников. Или посмотрите на java.nio для асинхронного неблокирующего ввода-вывода.
Я не совсем понимаю ваши требования здесь, но кажется, что у вас может быть один поток / актер, ищущий события ввода / вывода. Затем в качестве запланированных «рабочих элементов» запланируйте эффекты, которые создают неблокирующих актеров. Попросите этих участников зарегистрироваться в потоке / субъекте ввода-вывода для получения сообщений о событиях ввода-вывода, которые им небезразличны.
Как можно отменить ранее запланированный рабочий элемент?
ScheduledExecutorService
возвращает фьючерсы. То, что у вас есть, не плохой дизайн в этом отношении. Соберите их на карте и вызовите future.cancel ().