我理解的死鎖是指 「無外界條件干預無法自行解決的一種狀態」這種狀態一旦出現會導致程式邏輯問題,資源占用問題等很嚴重的問題。
下面這段**截自書中的**, 演示了死鎖的場景
public
class
deadlockdemo
private
void
deadlock()
catch
(interruptedexception e)
synchronized
(b)}}}
);thread t2 =
newthread
(new
runnable()
}}})
; t1.
start()
; t2.
start()
;}}
當出現死鎖的時候, 線上的業務是可以反饋出來的, 同時我們通過執行緒 dump 是可以查詢到具體的死鎖地方.
當我們知道什麼是死鎖問題後, 那就應該在開發階段首先去考慮並且避免這種場景
什麼是資源,對於軟體程式來說資源就是
問:那什麼情況會出現資源問題呢?
答:不合理的分配情況下
怎麼做才能做到合理分配是我們在做程式設計時需要考慮的,比如軟體執行的網路環境,磁碟大小,記憶體大小,系統的cpu能力、核心數等等
一般在資源分配上遵循兩種任務情況來決定,1 是 io密集型任務 2 是 cpu密集型任務。再簡單一點就是你的任務是需要資料的還是需要計算的。需要資料的就是io,需要計算的就是cpu, 根據這兩種情況來指定我們的資源分配。推薦一篇文章
合理的資源分配,可以將系統的效能發揮的更好,反之更壞。所以執行緒不是建立的越多越好。
執行緒池的執行緒復用,根據資源合理的分配執行緒數,都可以幫我們有效的解決資源問題。執行緒數的大小設定。
建議
cpu密集型任務,最佳執行緒數設定為 cpu數+1
io密集型任務, 最佳執行緒數目 = ((執行緒等待時間 + 執行緒cpu時間)/ 執行緒cpu時間 )* cpu數目
P V 的兩個問題
有兩類程序 a 和 b,乙個資源 t。兩類不能同時使用乙個資源 t。可以有至多 n 個 a 同時使用 t,或者至多 m 個 b 同時使用 t。semaphore cnta 0 semaphore cntb 0 semaphore mutext 1 semaphore mutexa 1 semapho...
兩個問題的對比
問題1 cf390c 給定若干行聊天記錄 發言人 話 有些聊天記錄的 發言人 是缺失的,已知相鄰對話發言人一定不同,且每個發言人說的話裡都不會包含自己的名字,現給定可能的發言人的集合,請填充每個對話的發言人.來自codeforces round 390 問題2 lc36 給定乙個9 9的矩陣,有些元...
兩個奇怪的問題
因為 中有align left class table cellspacing 1 cellpadding 4 width 800 align left 導致 相對位置十分的怪異。後面的文字不是在 後面,而是和 在水平上對齊!刪掉就好了。td font family tahoma,verdana f...