Как вернуть значение из thread в java?

Пользователь

от vladimir , в категории: Java , 2 месяца назад

Как вернуть значение из thread в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от brooklyn , 2 месяца назад

@vladimir 

В Java значение может быть возвращено из потока (thread) с использованием следующих методов:

  1. Способ с использованием интерфейса Callable и класса Future:
 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. Способ с использованием переменной-члена:
 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;
    }
}


Оба способа позволяют получить результат из потока и использовать его в остальной части программы.