一、爲什麼要用線程池
1、通過複用線程池中的線程,來減少線程創建和銷燬的性能開銷
2、對線程進行一些維護和管理,比如定時開始,週期執行,開發數控制等等
二、線程參數意義
當任務數 超過 核心線程數時,會將超過的任務放到隊列中,只會創建三個線程重複使用
corePoolSize 表示核心線程數
三、線程中的方法
join方法
加入join() 方法之後,主線程啓動子線程之後,會等待子線程執行完畢之後再繼續執行主線程下面的操作(那個線程join的那麼就先等哪個線程先執行完,再執行其他的線程)如果它加入的線程沒有存活,則當前線程不需要停止。
sleep
當前正在執行的線程休眠(暫時停止執行)指定的毫秒數,具體取決於系統計時器和調度程序的精度和準確性。 該線程不會失去任何監視器的所有權。
其實主要的就是他是讓其他線程走,自己進行休眠,但是自己卻不會釋放對象鎖,也就是說,如果有同步鎖的時候,其他線程不能訪問共享數據。
注意該方法要捕獲異常 比如有兩個線程同時執行(沒有Synchronized),一個線程優先級爲MAX_PRIORITY,另一 個爲MIN_PRIORITY,如果沒有Sleep()方法,只有高優先級的線程執行完成後,低優先級 的線程才能執行;但當高優先級的線程sleep(5000)後,低優先級就有機會執行了。 總之,sleep()可以使低優先級的線程得到執行的機會,當然也可以讓同優先級、高優先級的 線程有執行的機會。
yeid
暫停當前正在執行的線程對象,並執行其他線程。讓相同優先級的線程之間能適當的輪轉執行
四、多線程的四種創建方式
1)繼承Thread類創建線程
2)實現Runnable接口創建線程
3)使用Callable和Future創建線程
4)使用線程池例如用Executor框架
參考博客和視頻
https://blog.csdn.net/m0_37840000/article/details/79756932?utm_source=blogxgwz7
https://www.bilibili.com/video/BV1nE411P7wf?from=search&seid=194202808448674317