JAVA-多線程線程池 簡單介紹

一、爲什麼要用線程池

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章