public class test }}
public void rightleft()}}
}
動態的鎖順序死鎖
有時候,並不能清楚地知道是否在鎖順序上有足夠的控制權來避免死鎖的發生。例如以下**:
public void transfermoney(account fromaccount, account toaccount, dollaramount amount) else
} }
}
當兩個執行緒分別呼叫上面的**,其中乙個執行緒從x向y轉賬,另乙個執行緒從y向x轉賬,那麼就會發生死鎖:
a: transfermoney(myaccount,youraccount,10);
b: transfermoney(youraccount,myaccount,10);
如果執行順序不當,那麼可能a獲得myaccount的鎖並等待youraccount,b獲得youraccount的鎖並等待myaccount
public void transfermoney(final account fromaccount, final account toaccount, final dollaramount amount) else
} }
// 通過唯一hashcode來統一鎖的順序, 如果account具有唯一鍵, 可以採用該鍵來作為順序.
int fromhash = system.identityhashcode(fromaccount);
int tohash = system.identityhashcode(toaccount);
if (fromhash < tohash)
} } else if (fromhash > tohash)
} } else
} }
} }
如果要獲取多個鎖,必須考慮鎖的順序,盡可能使用開放呼叫
使用顯示鎖檢測死鎖,並且可以從死鎖中恢復過來
通過執行緒轉儲資訊來分析死鎖
糟糕的響應性也很影響活躍性
活鎖:儘管沒有被阻塞, 執行緒卻仍然不能繼續, 因為它不斷重試相同的操作, 卻總是失敗. 活鎖通常發生在訊息處理應用程式中
Java程式設計思想筆記 第十章
1 可以將乙個類的定義放在另乙個類的定義內部,這就是內部類。2 如果想從外部類的非靜態方法之外的任意位置建立某個內部類的物件,那麼必須顯式的指明這個物件的型別 outerclassname.innerclassname。3 內部類擁有其外部類的所有元素的訪問權。4 如果在內部類中需要生成對於外部類的...
第十章 網路程式設計
1.網路基礎概念 網路程式設計!程式設計 略2.ip協議 ip internet protocol 協議是網際層的主要協議,支援網間互連的資料報通訊。它提供主要功能有 1 無連線資料報傳送 2 資料報路由選擇和差錯控制 3.tcp udp 1 tcp transmission contorl pro...
C 程式設計第十章
軟體開發者將被開發的整個業務範圍稱作 問題域 按一下步驟建立物件層。1 將問題域和系統責任作為出發點 2 正確運用抽象原則 3 尋找候選物件的基本方法尋找候選物件的基本方法的主要策略是從問題域 系統邊界和系統責任三方找出可能候選物件。1 考慮問題域中可啟發分析人員發現物件的因素。2 考慮系統邊界可以...