Их различие в использовании видно из соответствующей документации:
Callable
:
Задача, которая возвращает результат, и может выдать исключение . Implementors
определить единственный метод без аргументов, называемый call.
Интерфейс Callable похож на Runnable в том, что оба
предназначен для классов, чьи экземпляры потенциально выполняются
другая тема .
Supplier
Представляет поставщика результатов.
Нет требования, чтобы каждый новый или отдельный результат возвращался
время, когда вызывается поставщик.
Это означает, что вызывающий Callable.call
ожидает, что будет сгенерировано исключение, и обработает исключение соответствующим образом. Это полезно для таких задач, как чтение и запись в файлы, где может быть выброшено множество типов IOException
. Callable
также предназначен для работы в другом потоке.
Supplier
с другой стороны, очень общий. Он просто «предоставляет значение» и все.
То есть Callable
более специализирован, чем Supplier
. Если вы не имеете дело с другим потоком или ваша задача вряд ли выдаст исключение, рекомендуется Supplier
.