java併發程式設計第七章筆記

2021-08-18 13:58:59 字數 1727 閱讀 3092

public class thread

public boolean isinterrupted()

public static boolean interrupted()

}

void interrupt():中斷目標執行緒

boolean isinterrupted():返回目標執行緒的中斷狀態

/**

* 通過中斷來取消

* @author cream

* */

public class primeproducer extends thread

@override

public void run()

} catch (interruptedexception e)

} public void cancel()

}

當呼叫可中斷的阻塞函式時,有兩種策略用來處理interruptedexception:

傳遞異常,從而使你的方法也成為可中斷的阻塞方法。

恢復中斷狀態,從而使呼叫棧中的上層**能夠對其進行處理。

/**

* 不可取消的任務在退出前恢復中斷

*/public task getnexttask(blockingqueuequeue) catch (interruptedexception e)

} } finally

}

executorservice提供兩種關閉方法,使用shutdown正常關閉,以及使用shutdownnow強行關閉,使用正常關閉時,等到所有佇列中的任務執行完畢後才關閉,使用強行關閉時,首先關閉當前正在執行的任務,然後返回所有尚未啟動的任務清單。但是,shutdownnow無法通過常規方法來找出那些任務已經開始但尚未結束。

另一種關閉生產者消費者服務的方式是使用「毒丸」物件:乙個放在佇列上的物件,當得到這個物件時立即停止。消費者會處理毒丸之前的所有工作,而生產者在提交了毒丸物件後將不再提交任何工作。

關閉鉤子:在正常關閉中,jvm首先呼叫所有已註冊的關閉鉤子。

runtime.getruntime().addshutdownhook(shutdownhook);

這個方法的意思就是在jvm中增加乙個關閉的鉤子,當jvm關閉的時候,會執行系統中已經設定的所有通過方法addshutdownhook新增的鉤子,當系統執行完這些鉤子後,jvm才會關閉。所以這些鉤子可以在jvm關閉的時候進行記憶體清理、物件銷毀等操作。用途:

1應用程式正常退出,在退出時執行特定的業務邏輯,或者關閉資源等操作。

2虛擬機器非正常退出,比如使用者按下ctrl+c、outofmemory宕機、作業系統關閉等。在退出時執行必要的挽救措施

建議:同乙個jvm最好只使用乙個關閉鉤子,而不是每個服務都使用乙個不同的關閉鉤子,使用多個關閉鉤子可能會出現當前這個鉤子所要依賴的服務可能已經被另外乙個關閉鉤子關閉了。為了避免這種情況,建議關閉操作在單個執行緒中序列執行,從而避免了再關閉操作之間出現競態條件或者死鎖等問題。

守護執行緒:

當需要建立執行緒來執行輔助工作,但又不希望這個執行緒阻礙jvm的關閉時用到。

當乙個執行緒退出時,jvm會檢查其他正在執行的執行緒,如果這些執行緒都是守護執行緒,那麼jvm會正常退出操作,當jvm停止時,所有仍然存在的守護執行緒都會被拋棄——既不會執行finally**塊,也不會執行回卷棧,而jvm只是直接退出。

第七章筆記

程序就是cpu未完成的工作 檢視程序的相關命令 ps a 關於當前環境的所有程序 x 與當前環境無關的所有程序 f 顯示程序從屬關係 e 顯示當前使用者環境中的所有程序 l 長列表顯示程序的詳細資訊 u 顯示程序的使用者資訊 ps ax o cpu,mem,user,group,comm,nice,...

第七章 取消與關閉 Java併發程式設計實戰 閱讀總結

只有在生產者和消費者的數量都已知的情況下,才可以使用 毒丸 物件。在 indexing service 中採用的解決方案可以擴充套件到多個生產者 只需每個生產者都向佇列中放入乙個 毒丸 物件,並且消費者僅當在接收到 n poducers 個 毒丸 物件時才停止。這種方法也可以擴充套件到多個消費者的情...

程式設計思想第七章

過載 相同的返回值,相同的函式名稱,不同的引數列表。override註解是jdk1.5之後的產物,可以防止你在不想過載時而意外的進行過載 因為父類沒有這個過載方法,所以不能用這個註解 7.1復用 的三種方式 1,直接new關鍵字建立該類物件,組合 優點 快速方便 缺點 生成和銷毀物件,給效能帶來額外...