Вы не используете исключения как способ выхода из условия (по крайней мере, обычно, и лучше избегать этой практики.) Исключение для ... битов ... объявлять исключения, ошибки , ситуации и условия, которые обычно или потенциально плохие.
Завершение работы не является (как правило) условием ошибки, поэтому, по крайней мере с этой философской / проектной точки зрения, я бы предпочел первый вариант с использованием переменной флага выключения.
Кроме того, флаг можно выводить как свойство только для чтения (скажем, как получатель). Затем компоненты, внешние по отношению к потоку, могут видеть, является ли поток все еще активным (если у них есть логика, которая законно зависит от этого.)
Что касается личной заметки, мне не нравится, что Java использует InterruptedException, поскольку обычно это не исключение, скажем, а сигнал, обычно нормальный и ожидаемый сигнал. Ну хорошо.