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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

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

@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;
    }
}


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

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

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

@vladimir 

Есть два распространенных способа вернуть значение из потока в Java:

  1. Использование интерфейса Callable и класса Future: Создаем объект Callable, реализующий метод call() и возвращающий нужное значение. Создаем объект FutureTask, передавая в конструктор объект Callable. Создаем поток, передавая ему объект FutureTask, и запускаем его методом start(). Далее, для получения результата используем метод get() объекта FutureTask.
  2. Использование переменной-члена: Создаем переменную-член (например, объект Holder) для хранения значения. В методе run() потока присваиваем значение переменной-члену. После выполнения потока получаем значение из переменной-члена.


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