线程
启动线程
Rust标准库的 std::thread 模块提供了线程相关API。
thread::spawn(|| { // 传入闭包
println!("thread do something...");
});
thread::spawn()方法接收一个闭包,类似于Java中Thread构造时接收Runnable对象,该方法创建线程并执行。
join
join是主线程等待子线程结束的方法。Rust的线程闭包可以直接返回一个运行结果,传递给外部等待主线程。
fn main(){
// 获取线程句柄,线程开始执行,spawn()方法返回 JoinHandle<&str> 类型
let handle = thread::spawn(|| {
println!("thread do something...");
"hello thread" // 注意,表达式结尾不要加分号';'
});
// 等待线程,获取线程执行结果
let result = handle.join(); // 返回 Result<&str> 类型
let value = result.unwrap(); // 返回 &str 类型
// 等价于: let value = handle.join().unwrap();
println!("result = {}", value);
}
thread::spawn()方法会返回线程句柄,其类型为 std::thread::JoinHandle<T>,T表示闭包返回值的类型。若闭包无返回值,则句柄类型为JoinHandle<()>,上例的句柄类型为JoinHandle<&str>
handle.join()方法表示主线程等待线程结束。该方法返回Result<T>类型的值,上例返回的类型为Result<&str>。
result.unwrap()方法将包装在Result<T>中的值取出来。
sleep
thread::sleep()方法使线程休眠,传入一个 std::time::Duration 对象指定休眠时间。
thread::sleep(Duration::from_millis(3000)); // sleep '3s'