Threads

Rust threads work similarly to threads in other languages:

  1. use std::thread;
  2. use std::time::Duration;
  3. fn main() {
  4. thread::spawn(|| {
  5. for i in 1..10 {
  6. println!("Count in thread: {i}!");
  7. thread::sleep(Duration::from_millis(5));
  8. }
  9. });
  10. for i in 1..5 {
  11. println!("Main thread: {i}");
  12. thread::sleep(Duration::from_millis(5));
  13. }
  14. }
  • 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.

Key points:

  • Notice that the thread is stopped before it reaches 10 — the main thread is not waiting.

  • Use let handle = thread::spawn(...) and later handle.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 from handle.join() to get access to the panic payload. This is a good time to talk about Any.