執行緒的同步與死鎖
1:同步問題的引出
class mythread implements runnable else
} }}public class test
}//執行結果
票販子b賣票,ticket = 10
票販子b賣票,ticket = 8
票販子a賣票,ticket = 9
票販子a賣票,ticket = 6
票販子c賣票,ticket = 9
票販子c賣票,ticket = 4
票販子a賣票,ticket = 5
票販子b賣票,ticket = 7
票販子b賣票,ticket = 1
***** 票已經賣光了 *****
票販子a賣票,ticket = 2
***** 票已經賣光了 *****
票販子c賣票,ticket = 3
***** 票已經賣光了 *****
class mythread implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);
} else
} }}public class test
}票販子c賣票,ticket = 10
票販子b賣票,ticket = 8
票販子a賣票,ticket = 9
票販子c賣票,ticket = 7
票販子a賣票,ticket = 6
票販子b賣票,ticket = 5
票販子c賣票,ticket = 4
票販子a賣票,ticket = 2
票販子b賣票,ticket = 3
票販子c賣票,ticket = 1
***** 票已經賣光了 *****
票販子b賣票,ticket = 0
***** 票已經賣光了 *****
票販子a賣票,ticket = -1
***** 票已經賣光了 *****
三個執行緒都過了檢測那一關
當多個執行緒訪問同一資源的時候,我們如何能夠保證資料的完整性,這個時候就需要用同步來解決了
2:執行緒同步-利用同步**塊進行處理
如果要想在程式之中實現這把鎖的功能,就可以使用synchronized關鍵字來實現,利用此關鍵字可以定義同步方法或同步**塊,在同步**塊的操作裡面的**只允許乙個執行緒執行。
觀察下面的**來解決上述問題中存在的問題;
class mythread implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);
} else
}} }
}public class test
}//執行結果
票販子a賣票,ticket = 10
票販子c賣票,ticket = 9
票販子c賣票,ticket = 8
票販子b賣票,ticket = 7
票販子b賣票,ticket = 6
票販子b賣票,ticket = 5
票販子b賣票,ticket = 4
票販子b賣票,ticket = 3
票販子b賣票,ticket = 2
票販子b賣票,ticket = 1
***** 票已經賣光了 *****
***** 票已經賣光了 *****
***** 票已經賣光了 *****
上述**加入了同步:加入同步處理之後,程式的整體效能下降了。同步實際上會造成效能的下降。
3;同步問題:利用同步方法解決:只需要在定義的方法上使用synchronized關鍵字即可
class mythread implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);
return true ;
} else
} @override
public void run() }}
public class threaddemo
}//執行結果
票販子b賣票,ticket = 10
票販子b賣票,ticket = 9
票販子c賣票,ticket = 8
票販子c賣票,ticket = 7
票販子c賣票,ticket = 6
票販子c賣票,ticket = 5
票販子c賣票,ticket = 4
票販子c賣票,ticket = 3
票販子c賣票,ticket = 2
票販子c賣票,ticket = 1
***** 票已經賣光了 *****
***** 票已經賣光了 *****
***** 票已經賣光了 *****
4:死鎖
}
執行效果如下;
I學霸官方免費教程三十八 Java基礎教程之異常
程式中不正常的情況分為兩大類 錯誤 error 和異常 exception 錯誤 error 程式本身無法對這種不正常的情況進行處理,將會導致程式崩潰 例如 記憶體耗盡錯誤,jvm崩潰錯誤等 異常 exception 程式可以特殊的 對不正常的情況進行捕獲和處理,程式可以繼續執行 例如 除零異常,空...
Java併發程式設計八 執行緒池
1.降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。2.提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。3.提高執行緒的可管理性。執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一的分配,調優和監控。...
Java程式設計師從笨鳥到菜鳥(三十八)vue
1.實現上 original message p methdos reversed message p computed reversed message p div data methods computed script 執行結果 original message hello methdos r...