Java基礎-多線程(2)

一.JDK5以后的針對線程的鎖定操作和釋放操作.

同步的弊端:

A:效率低

B:容易產生死鎖

二.死鎖問題的描述

?兩個或者兩個以上的線程在爭奪資源過程中,發生的一種互相等待的現象.

三.生產者和消費者多線程的體現

舉例 :

? ? ? ? ? ?資源類;

? ? ? ? ? ?設置數據(生產者);

? ? ? ? ? ? 獲取數據(消費者);

加鎖:

? ? ? ? ? ? A:生產者和消費和都要加鎖;

? ? ? ? ? ? B:必須是同一把鎖;

等待喚醒思路:

? ? ? ? ? ? A:生產者:

? ? ? ? ? ? ? ? ? ? ?先看有沒有數據,有就等待,沒有就生產,生產完之后通知消費者來消費數據.

? ? ? ? ? ? ?B:消費者:

? ? ? ? ? ? ? ? ? ? ? ?先看有沒有數據,有就消費,沒有就等待,通知生產者生產.

等待喚醒方法:

? ? ? ? ? ?wait();等待.

? ? ? ? ? ?notify();喚醒單個線程.

? ? ? ? ? ?notifyAll();喚醒所有線程.

? ? ? ? ? ?這些方法必須通過鎖對象調用.

四.線程組

把多個線程放到一個組里.這樣比較方法操作整個組的線程.

代碼舉例:

代碼舉例

五.線程池

線程池的好處:線程池里的每一個線程代碼結束后,并不會死亡,而是再次回到線程池中成為空閑狀態,等待下一個對象來使用.

實現線程池的步驟:

? ? ? ? ? ? ? ? ?A:創建一個線程池對象,控制需要創建幾個線程對象.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?public static ExxcutorService newFixedThreadPool(int nThreads);

? ? ? ? ? ? ? ? ?B:這種線程池的線程可以執行:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Runnable對象或者Callable對象代表的線程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 做一個類實現Runnable接口.

? ? ? ? ? ? ? ? C:調用如下方法即可.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?submit(Runnable task);

代碼舉例:


代碼舉例

六.線程常見情況

* A:新建--就緒--運行--死亡

* B:新建--就緒--運行--就緒--運行--死亡

* C:新建--就緒--運行--其他阻塞--就緒--運行--死亡

* D:新建--就緒--運行--同步阻塞--就緒--運行--死亡

* E:新建--就緒--運行--等待阻塞--同步阻塞阻塞--就緒--運行--死亡

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容