跳到主内容
Rust
文章阅读

Rust线程入门

2025/12/1674 次阅读2 分钟

注意事项:

  1. 主线程不会等待线程任务完成,需要使用join函数来实现
  2. 线程中不能借用主线程中的值,需要使用scope范围线程来实现

use std::thread;
use std::thread::scope;
use std::time::Duration;

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

    for i in 1..5 {
        println!("主线程中执行: {i}");
        thread::sleep(Duration::from_millis(5));
    }
    handle.join().unwrap(); //等待线程中执行完毕,默认是不会等待线程中任务完成的,会在打印10之前就结束主线程



    //foo();
    foo2();
}

//要注释,否则编译不通过
fn foo(){
    let s = String::from("Hello");
    thread::spawn(|| {
       println!("Length:{}",s.len()); //这里会报错,不能在线程中借用主线程环境中的值,下面可以使用范围线程来实现这个目的
    });
}


//范围线程来解决上面的问题
fn foo2(){
    let s=  String::from("Hello");
    thread::scope(|scope| {
        scope.spawn(||{
            println!("Length: {}",s.len());
        });
    });
}

image.png

返回顶部