Channel

std::sync::mpsc provides multi-producer, single-consumer FIFO queue communication primitives and message-based communication over channels.

Example code (multiple producers and one receiver)

use std::sync::mpsc;
use std::thread;

fn main() {
    let (tx, rx) = mpsc::channel();
    let tx1 = tx.clone();
   
    let handler1 = thread::spawn(move || {
        for i in 1..=10 {
            tx.send(format!("{} {}", "T1: Hi", i)).unwrap();
            thread::sleep(std::time::Duration::from_secs(1));
        }
        
    });

    let handler2 = thread::spawn(move || {
        for i in 1..=10 {
            tx1.send(format!("{} {}", "T2: Hi", i)).unwrap();
            thread::sleep(std::time::Duration::from_secs(1));
        }
    });

    for received in rx {
        println!("{received:?}");
    }

    handler2.join().unwrap();
    handler1.join().unwrap();
}