@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:
Оба способа позволяют вернуть значение из потока в основной поток и использовать его в дальнейшей части программы.