Panicking threads

What happens when one of the spawned threads gets into a panic? No problem, the threads are isolated from each other, and only the panicking thread will crash after having freed its resources; the parent thread is not affected. In fact, the parent can test the is_err return value from spawn, like this:

// code from Chapter 9/code/panic_thread.rs:  
use std::thread; 
 
fn main() { 
   let result = thread::spawn(move || { 
      panic!("I have fallen into an unrecoverable trap!"); 
   }).join(); 
 
   if result.is_err() { 
      println!("This child has panicked"); 
   } 
} 

This prints out the following:

thread '<unnamed>' panicked at 'I have fallen into an unrecoverable trap!'
This child has panicked  

To put it another way, the thread is a unit of failure isolation.