Thread Join使用
Thread Join在我們實際業務場景中使用的場景可能不是很多,java.util.concurrent包下面已經提供很多種方式來幫我們解決執行緒同步問題,這裡可以作為簡單的使用和了解。
/** * Join:Waits for this thread to die.等待執行緒死亡! * 底層通過jdksynchronizedwait notify 實現 * 使用場景 地鐵站過安檢時,需把揹包放入檢查臺流水線,行人才能進入站內,揹包和人同時移動,但是行人速度較快,需要在另一端等到揹包安檢完成。 */ public class JoinTest { public static final Logger logger = LoggerFactory.getLogger(JoinTest.class); public static void main(String[] args) throws InterruptedException { //準備2個執行緒 Thread thread1 = getThread(); Thread thread2 = getThread(); //啟動1第一個執行緒 thread1.start(); //第一個執行緒執行完成才能執行後面任務 thread1.join(); thread2.start(); thread2.join(); logger.info(Thread.currentThread().getName() + "等待thread1和thread2執行結束,在執行後續操作!"); } private static Thread getThread() { return new Thread(() -> { try { logger.info(Thread.currentThread().getName() + "開始任務======================="); //模擬1秒鐘任務 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } logger.info(Thread.currentThread().getName() + "任務執行完成之後,下面才能執行,不然一直被阻塞"); }); } }
日誌輸出:
16:05:55.508 [Thread-0] INFO com.test.tenant.JoinTest - Thread-0開始任務======================= 16:05:56.515 [Thread-0] INFO com.test.tenant.JoinTest - Thread-0任務執行完成之後,下面才能執行,不然一直被阻塞 16:05:56.515 [Thread-1] INFO com.test.tenant.JoinTest - Thread-1開始任務======================= 16:05:57.519 [Thread-1] INFO com.test.tenant.JoinTest - Thread-1任務執行完成之後,下面才能執行,不然一直被阻塞 16:05:57.520 [main] INFO com.test.tenant.JoinTest - main等待thread1和thread2執行結束,在執行後續操作! Process finished with exit code 0