日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

死锁产生的原因及条件和手写死锁

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 死锁产生的原因及条件和手写死锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

什么是死鎖?

由于兩個或者多個線程互相持有對方所需要的資源,導致線程處于等待狀態,造成死鎖。

為什么會產生死鎖(為什么會互相占用對方的資源)

  • 因為系統資源不足。
  • 進程運行推進的順序不合適。
  • 資源分配不當等。

產生死鎖的四個必要條件

互斥條件:一個資源每次只能被一個進程使用。

請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

手寫死鎖

public class DeadLock {public static void main(String[] args) {Object object1 = new Object();Object object2 = new Object();Thread thread1 = new Thread(new FirstThread(object1, object2));Thread thread2 = new Thread(new SecondThread(object1, object2));thread1.start();thread2.start();} }class FirstThread implements Runnable {Object object1;Object object2;public FirstThread(Object object1, Object object2) {this.object1 = object1;this.object2 = object2;}@Overridepublic void run() {synchronized (object1) {// 獲得鎖對象1try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch block e.printStackTrace();}synchronized (object2) {// 獲得鎖對象2 }}} }class SecondThread implements Runnable {Object object1;Object object2;public SecondThread(Object object1, Object object2) {this.object1 = object1;this.object2 = object2;}@Overridepublic void run() {synchronized (object2) {// 獲得鎖對象2try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch block e.printStackTrace();}synchronized (object1) {// 獲得鎖對象1 }}} }

?

轉載于:https://www.cnblogs.com/java-spring/p/10792062.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的死锁产生的原因及条件和手写死锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。