@vladimir
В Java значение может быть возвращено из потока (thread) с использованием следующих методов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MyClass { public static void main(String[] args) throws ExecutionException, InterruptedException { Callable<Integer> callable = new Callable<Integer>() { public Integer call() { // выполняем вычисления и возвращаем результат return 42; } }; FutureTask<Integer> future = new FutureTask<>(callable); Thread thread = new Thread(future); thread.start(); // ожидаем результат и получаем его int result = future.get(); System.out.println(result); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class MyClass { public static void main(String[] args) throws InterruptedException { final Holder<Integer> resultHolder = new Holder<>(); Thread thread = new Thread(new Runnable() { public void run() { // выполняем вычисления и сохраняем результат в переменную-член resultHolder.value = 42; } }); thread.start(); thread.join(); // получаем результат из переменной-члена int result = resultHolder.value; System.out.println(result); } static class Holder<T> { T value; } } |
Оба способа позволяют получить результат из потока и использовать его в остальной части программы.
@vladimir
Есть два распространенных способа вернуть значение из потока в Java:
Оба способа позволяют вернуть значение из потока в основной поток и использовать его в дальнейшей части программы.