JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
生活随笔
收集整理的這篇文章主要介紹了
JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
● JAVA中如何確保N個線程可以訪問N個資源,但同時又不導致死鎖??
考察點:死鎖
參考回答:
使用多線程的時候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現死鎖了。
預防死鎖,預先破壞產生死鎖的四個條件?;コ獠豢赡芷茐?#xff0c;所以有如下三種方法:
1.破壞請求和保持條件,進程必須等所有要請求的資源都空閑時才能申請資源,這種方法會使資源浪費嚴重(有些資源可能僅在運行初期或結束時才使用,甚至根本不使用). 允許進程獲取初期所需資源后,便開始運行,運行過程中再逐步釋放自己占有的資源,比如有一個進程的任務是把數據復制到磁盤中再打印,前期只需獲得磁盤資源而不需要獲得打印機資源,待復制完畢后再釋放掉磁盤資源。這種方法比第一種方法好,會使資源利用率上升。
2.破壞不可搶占條件,這種方法代價大,實現復雜。
3.破壞循壞等待條件,對各進程請求資源的順序做一個規定,避免相互等待。這種方法對資源的利用率比前兩種都高,但是前期要為設備指定序號,新設備加入會有一個問題,其次對用戶編程也有限制。
總結
以上是生活随笔為你收集整理的JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: synchronized与java.ut
- 下一篇: 锁和同步的区别