Что касается пакета java.util.concurrent и интерфейса Future, я замечаю (если не ошибаюсь), что возможность запускать длительные задачи и иметь возможность запрашивать прогресс только с классом реализации SwingWorker.
Это вызывает следующий вопрос:
Есть ли способ в не-GUI, не-Swing-приложении (для создания консольного приложения), чтобы запустить длинную задачу в фоновом режиме и разрешить другим потокам проверять прогресс? Мне кажется, что нет причин, по которым эта возможность должна ограничиваться приложениями swing/GUI. В противном случае единственный доступный вариант, как я его вижу, - это пройти через ExecutorService:: submit, который возвращает объект Future. Однако базовый интерфейс Future не позволяет контролировать прогресс.