Struct std::thread::Builder1.0.0[][src]

pub struct Builder { /* fields omitted */ }
Expand description

线程工厂,可用于配置新线程的属性。

可以在其上链接方法以对其进行配置。

有两种配置可供选择:

spawn 方法将获取构建器的所有权,并使用给定的配置为线程句柄创建 io::Result

thread::spawn 自由函数使用默认配置的 Builder,并返回其值 unwrap

当您想从启动线程失败中恢复时,您可能想使用 spawn 而不是 thread::spawn,实际上,实际上自由函数会在 Builder 方法返回 io::Result 时 panic。

Examples

use std::thread;

let builder = thread::Builder::new();

let handler = builder.spawn(|| {
    // 线程代码
}).unwrap();

handler.join().unwrap();
Run

Implementations

生成用于生成线程的基本配置,从中可以链接配置方法。

Examples

use std::thread;

let builder = thread::Builder::new()
                              .name("foo".into())
                              .stack_size(32 * 1024);

let handler = builder.spawn(|| {
    // 线程代码
}).unwrap();

handler.join().unwrap();
Run

命名未来线程。当前,该名称仅用于 panic 消息中的标识。

该名称不能包含空字节 (\0)。

有关命名线程的更多信息,请参见 模块级文档

Examples

use std::thread;

let builder = thread::Builder::new()
    .name("foo".into());

let handler = builder.spawn(|| {
    assert_eq!(thread::current().name(), Some("foo"))
}).unwrap();

handler.join().unwrap();
Run

设置新线程的栈大小 (以字节为单位)。

如果平台指定最小栈大小,则实际栈大小可能大于这个值。

有关线程的栈大小的更多信息,请参见 模块级文档

Examples

use std::thread;

let builder = thread::Builder::new().stack_size(32 * 1024);
Run

通过获取 Builder 的所有权产生一个新线程,并向其 JoinHandle 返回一个 io::Result

衍生的线程可能比调用者活得长 (除非调用者线程是主线程; 当主线程结束时,整个进程将终止)。 join 句柄可用于阻塞子线程的终止,包括恢复其 panic。

有关更完整的文档,请参见 thread::spawn

Errors

spawn 自由函数不同,此方法产生 io::Result 来捕获在操作系统级别创建线程的任何失败。

Panics

如果设置了线程名称并且它包含空字节,则会出现 panic。

Examples

use std::thread;

let builder = thread::Builder::new();

let handler = builder.spawn(|| {
    // 线程代码
}).unwrap();

handler.join().unwrap();
Run
🔬 This is a nightly-only experimental API. (thread_spawn_unchecked #55132)

通过获取 Builder 的所有权来产生不受任何生命周期限制的新线程,并将 io::Result 返回其 JoinHandle

衍生的线程可能比调用者活得长 (除非调用者线程是主线程; 当主线程结束时,整个进程将终止)。 join 句柄可用于阻塞子线程的终止,包括恢复其 panic。

此方法与 thread::Builder::spawn 相同,不同之处在于宽松的生命周期界限使其不安全。 有关更完整的文档,请参见 thread::spawn

Errors

spawn 自由函数不同,此方法产生 io::Result 来捕获在操作系统级别创建线程的任何失败。

Panics

如果设置了线程名称并且它包含空字节,则会出现 panic。

Safety

调用者必须确保所提供的线程闭包或其返回类型中的引用不能超过新建线程的生命周期。可以通过两种方式保证这一点:

  • 确保在丢弃任何引用数据之前已调用 join
  • 仅使用具有 'static 生命周期界限的类型,即没有 'static 引用或仅具有 'static 引用的类型 (thread::Builder::spawnthread::spawn 都静态地强制执行此属性)

Examples

#![feature(thread_spawn_unchecked)]
use std::thread;

let builder = thread::Builder::new();

let x = 1;
let thread_x = &x;

let handler = unsafe {
    builder.spawn_unchecked(move || {
        println!("x = {}", *thread_x);
    }).unwrap()
};

// 调用者必须确保已调用 `join()`,否则,如果在执行线程闭包之前 `x` 被丢弃,则可以访问释放的内存!
handler.join().unwrap();
Run

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。