Z
ZHANK
并发编程

线程 spawn/join

std::thread::spawn、join 等待、move 闭包、线程 panic 处理

线程 spawn/join

std::thread::spawn 创建线程,join 等待。move 闭包把数据所有权移入线程。

学完本章你将: 掌握 spawn/join、move 闭包捕获、线程 panic。


创建与等待

rust
use std::thread;
use std::time::Duration;

fn main() {
    let handle = thread::spawn(|| {
        for i in 1..=5 {
            println!("子线程: {}", i);
            thread::sleep(Duration::from_millis(100));
        }
    });

    for i in 1..=3 {
        println!("主线程: {}", i);
        thread::sleep(Duration::from_millis(100));
    }

    handle.join().unwrap();  // 等待子线程结束
    println!("全部完成");
}

move 闭包 —— 转移所有权

rust
let v = vec![1, 2, 3];

let handle = thread::spawn(move || {
    println!("{:?}", v);  // v 的所有权移入线程
});

// println!("{:?}", v);  // ❌ v 已被移动
handle.join().unwrap();

线程 panic 处理

rust
let handle = thread::spawn(|| {
    panic!("子线程崩溃了!");
});

match handle.join() {
    Ok(_) => println!("正常结束"),
    Err(e) => println!("线程 panic: {:?}", e),
}
// 子线程 panic 不影响主线程