Threads
Rust threads work similarly to threads in other languages:
use std::thread;
use std::time::Duration;
fn main() {
thread::spawn(|| {
for i in 1..10 {
println!("Count in thread: {i}!");
thread::sleep(Duration::from_millis(5));
}
});
for i in 1..5 {
println!("Main thread: {i}");
thread::sleep(Duration::from_millis(5));
}
}
- Threads are all daemon threads, the main thread does not wait for them.
- Thread panics are independent of each other.
- Panics can carry a payload, which can be unpacked with
downcast_ref
.
- Panics can carry a payload, which can be unpacked with
Key points:
Notice that the thread is stopped before it reaches 10 — the main thread is not waiting.
Use
let handle = thread::spawn(...)
and laterhandle.join()
to wait for the thread to finish.Trigger a panic in the thread, notice how this doesn’t affect
main
.Use the
Result
return value fromhandle.join()
to get access to the panic payload. This is a good time to talk about Any.