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
Speaker Notes
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
Resultreturn value fromhandle.join()to get access to the panic payload. This is a good time to talk aboutAny.
use std::thread;use std::time::Duration;fn main() {let handler = 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));}handler.join().unwrap();}