執行緒實現、啟動及區分方式
①實現方式
1、通過繼承Thread類實現一個執行緒
2、通過實現Runnable介面實現一個執行緒
繼承擴充套件性不強,java總只支援單繼承,如果一個類繼承Thread就不能繼承其他的類了。
②怎麼啟動?
Thread thread = new Thread(繼承了Thread的物件/實現了Runnable的物件)
thread.setName(“設定一個執行緒名稱”);
thread.start();
啟動執行緒使用start方法,而啟動了以後執行的是run方法。
③怎麼區分執行緒?在一個系統中有很多執行緒,每個執行緒都會列印日誌,我想區分是哪個執行緒列印的怎麼辦?
thread.setName(“設定一個執行緒名稱”); 這是一種規範,在建立執行緒完成後,都需要設定名稱。
執行緒併發庫
JDK5中增加了Doug Lea的併發庫,這一引進給Java執行緒的管理和使用提供了強大的便利性。 java.util.current包中提供了對執行緒優化、管理的各項操作,使得執行緒的使用變得的心應手。該包提供了執行緒的執行,執行緒池的建立,執行緒生命週期的控制.
Java通過Executors提供四個靜態方法建立四種執行緒池,分別為:
newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。
newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。
newScheduledThreadPool 建立一個定長執行緒池,支援定時及週期性任務執行。
newSingleThreadExecutor 建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先順序)執行
執行緒池的作用?
1、限定執行緒的個數,不會導致由於執行緒過多導致系統執行緩慢或崩潰
2、執行緒池不需要每次都去建立或銷燬,節約了資源、
3、執行緒池不需要每次都去建立,響應時間更快。
連線池也是一樣?