面試官:如讓線程順序執行?
我:使用Thread的join方法。
面試官:除了join還有別的辦法嗎?
我:目前只用過join。
面試官:哦,那你瞭解CountDownLatch嗎?
我:不瞭解,沒使用過。
面試中被問到線程順序執行,相信大家都能答出來join,但是除了join還有其他的辦法,不知道大家瞭解不。我這裡分享下3種方式。
第一種:join
第二種:線程池
通過Executors.newSingleThreadExecutor()來實現(這裡可以看我的《面試官問你java都有哪些線程池,自己是否自定義過線程池》)
第三種:通過CountDownLatch實現
這3種方式哪種比較好,我個人認為還是CountDownLatch,因為他的粒度更細,比如我上面的例子,t2線程執行一半,t3線程就可以執行,通過join和線程池都實現不了。而通過
CountDownLatch可以實現,如圖:總結:
選擇使用什麼樣的方式,取決於你的需求,如果你只是想順序的執行那join和線程池都可以使用,因為這2種方式比較簡單。如果需求是細粒度的,比如線程1執行到某個部分,線程2就得執行,就使用CountDownLatch。但是使用它時,一定要理清邏輯,不然可能await方法會阻塞。
閱讀更多 老徐聊技術 的文章