Класс JoinHandle
Класс JoinHandle представляет собой дескриптор,
который возвращается при создании нового потока с помощью
функции spawn или метода spawn класса Builder.
Он позволяет управлять жизненным циклом потока: дожидаться
его завершения, проверять, завершился ли поток, а также
получать результат, возвращаемый замыканием потока.
Класс JoinHandle является обобщенным и параметризуется
типом возвращаемого значения T.
Синтаксис
std::thread::JoinHandle<T>
Пример
Давайте создадим поток с помощью функции spawn
и получим дескриптор JoinHandle. Затем дождемся
завершения потока с помощью метода join:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
println!("Hello from thread!");
42
});
let res = handle.join().unwrap();
println!("Thread returned: {}", res);
}
Результат выполнения кода:
Hello from thread!
Thread returned: 42
Пример
Давайте проверим, завершился ли поток, с помощью метода
is_finished:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
thread::sleep(Duration::from_millis(100));
"done"
});
println!("Finished: {}", handle.is_finished());
thread::sleep(Duration::from_millis(200));
println!("Finished: {}", handle.is_finished());
}
Результат выполнения кода:
Finished: false
Finished: true
Пример
Давайте передадим значение из потока через возвращаемое
значение замыкания и получим его с помощью метода
join:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
let mut sum = 0;
for i in 1..=5 {
sum += i;
}
sum
});
let res = handle.join().unwrap();
println!("Sum: {}", res);
}
Результат выполнения кода:
Sum: 15
Смотрите также
-
метод
join,
который ожидает завершения потока и возвращает результат -
метод
is_finished,
который проверяет, завершился ли поток -
класс
Thread,
который представляет собой дескриптор потока -
функция
spawn,
которая создает новый поток и возвращает JoinHandle