JAVA-基礎語法-多線程基礎-守護線程
守護線程
非守護線程結束完成后,JVM不關心守護線程是否結束,都會 退出虛擬機。
所以守護線程不能持有需要關閉的資源,如文件關閉等。不然會造成文件丟失。
創建守護線程。
Thread t = new MyThread();
t.setDaemon(true);
t.start();
線程同步
多線程模型下,要保證邏輯正確,對共享變量進行讀寫時,必須保證一組指令以原子方式執行:即某一個線程執行時,其他線程必須等待:
┌───────┐ ? ? ┌───────┐
│Thread1│ ? ? │Thread2│
└───┬───┘ ? ? └───┬───┘
│ ? ? ? ? ? ? │
│-- lock -- ? │
│ILOAD (100) │
│IADD ? ? ? ? │
│ISTORE (101) │
│-- unlock -- │
│ ? ? ? ? ? ? │-- lock --
│ ? ? ? ? ? ? │ILOAD (101)
│ ? ? ? ? ? ? │IADD
│ ? ? ? ? ? ? │ISTORE (102)
│ ? ? ? ? ? ? │-- unlock --
▼ ? ? ? ? ? ? ▼
通過加鎖和解鎖的操作,就能保證3條指令總是在一個線程執行期間,不會有其他線程會進入此指令區間。即使在執行期線程被操作系統中斷執行,其他線程也會因為無法獲得鎖導致無法進入此指令區間。只有執行線程將鎖釋放后,其他線程才有機會獲得鎖并執行。這種加鎖和解鎖之間的代碼塊我們稱之為臨界區(Critical Section),任何時候臨界區最多只有一個線程能執行。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。