|
|
@@ -0,0 +1,43 @@
|
|
|
+use std::thread;
|
|
|
+use std::time::Duration;
|
|
|
+use std::io::{self, Write};
|
|
|
+use std::sync::Arc;
|
|
|
+
|
|
|
+struct Runner;
|
|
|
+
|
|
|
+impl Runner {
|
|
|
+ fn run1(&self) -> io::Result<()> {
|
|
|
+ let mut stdout = io::stdout();
|
|
|
+ loop {
|
|
|
+ writeln!(stdout, "111")?;
|
|
|
+ thread::sleep(Duration::from_millis(100));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ fn run2(&self) -> io::Result<()> {
|
|
|
+ let mut stdout = io::stdout();
|
|
|
+ loop {
|
|
|
+ writeln!(stdout, "222")?;
|
|
|
+ thread::sleep(Duration::from_millis(100));
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[tokio::test]
|
|
|
+async fn test_thread() {
|
|
|
+ let runner = Arc::new(Runner);
|
|
|
+
|
|
|
+ let runner1 = Arc::clone(&runner);
|
|
|
+ let runner2 = Arc::clone(&runner);
|
|
|
+
|
|
|
+ let handle1 = thread::spawn(move || {
|
|
|
+ let _ = runner1.run1();
|
|
|
+ });
|
|
|
+
|
|
|
+ let handle2 = thread::spawn(move || {
|
|
|
+ let _ = runner2.run2();
|
|
|
+ });
|
|
|
+
|
|
|
+ let _ = handle1.join();
|
|
|
+ let _ = handle2.join();
|
|
|
+}
|