线程

启动线程

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'

results matching ""

    No results matching ""