线程 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 不影响主线程