Поток, который вы t.start()
отвечает только за запуск параллельных вычислений, а также за ожидание и сбор результата.
Он не связан с потоками, которые выполняют вычисления. Обычно он работает по умолчанию forkJoinPool
, независимо от потока, который отправляет вычислительные задачи.
Если вы хотите прервать вычисление, вы можете использовать настраиваемый серверный модуль выполнения (например, созданный вручную forkJoinPool
или threadPool
), а затем выключите его. Вы можете прочитать об этом здесь .
Или вы можете предоставить обратный вызов из вычислений.
Но все эти подходы не так хороши для такого случая.
Если вы создаете производственное решение или ваш случай сложен и важен для приложения, вам, вероятно, следует использовать что-то, что имеет отмену по умолчанию. Например, Monix.Task
или CancellableFuture
.
Или, по крайней мере, используйте Future
и отмените его с помощью обходных путей .