方式一比吭、聲明三個靜態(tài)thread對象
在通過.start()分別執(zhí)行三個線程的時候逞怨,分別調(diào)用.join()方法捌省。
? ? ? ? ?首先可以看到j(luò)oin方法是線程安全的碘橘,其次可以結(jié)合上圖一起看,當(dāng)傳入?yún)?shù)為0時吱肌,會命中一個wait(0)的方法痘拆,有經(jīng)驗的同學(xué)應(yīng)該能直接看懂,這里表示等待氮墨。但是需要說明的是纺蛆,這里的等待絕對不是等待調(diào)用者吐葵,而是阻塞的主線程,t1,t2,t3只是子線程桥氏,當(dāng)子線程運(yùn)行完畢后温峭,主線程結(jié)束等待。這里演示了join的工作方式字支,也證實了join能讓我們在程序中達(dá)到自己想要的效果凤藏。
方式二、 利用Executors線程池
? ? ? 利用newSingleThreadExecutor()方法依然能夠達(dá)到我們期待的效果堕伪,其實原理很簡單揖庄,方法內(nèi)部是一個基于FIFO的隊列,也就是說欠雌,當(dāng)我們依次將t1,t2,t3加入隊列中時蹄梢,實際在就緒狀態(tài)的只有t1這個線程,t2,t3則會被添加到隊列中富俄,當(dāng)t1執(zhí)行完畢后禁炒,則會繼續(xù)執(zhí)行隊列中的其他線程。
文章摘自:https://blog.csdn.net/u010185035/article/details/81172767