java基础---设计一个死锁
生活随笔
收集整理的這篇文章主要介紹了
java基础---设计一个死锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://www.cnblogs.com/baizhanshi/p/5437933.html /** * 一個簡單的死鎖類 * 當DeadLock類的對象flag==1時(td1),先鎖定o1,睡眠500毫秒 * 而td1在睡眠的時候另一個flag==0的對象(td2)線程啟動,先鎖定o2,睡眠500毫秒 * td1睡眠結束后需要鎖定o2才能繼續執行,而此時o2已被td2鎖定; * td2睡眠結束后需要鎖定o1才能繼續執行,而此時o1已被td1鎖定; * td1、td2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。 */? public?class?DeadLock implements?Runnable {? public?int?flag = 1;? //靜態對象是類的所有對象共享的? private?static?Object o1 = new?Object(), o2 = new?Object();? @Override? public?void?run() {? System.out.println("flag="?+ flag);? if?(flag == 1) {? synchronized?(o1) {? try?{? Thread.sleep(500);? } catch?(Exception e) {? e.printStackTrace();? }? synchronized?(o2) {? System.out.println("1");? }? }? }? if?(flag == 0) {? synchronized?(o2) {? try?{? Thread.sleep(500);? } catch?(Exception e) {? e.printStackTrace();? }? synchronized?(o1) {? System.out.println("0");? }? }? }? }? public?static?void?main(String[] args) {? DeadLock td1 = new?DeadLock();? DeadLock td2 = new?DeadLock();? td1.flag = 1;? td2.flag = 0;? //td1,td2都處于可執行狀態,但JVM線程調度先執行哪個線程是不確定的。? //td2的run()可能在td1的run()之前運行? new?Thread(td1).start();? new?Thread(td2).start();? }? }
轉載于:https://www.cnblogs.com/buptyuhanwen/p/9546580.html
總結
以上是生活随笔為你收集整理的java基础---设计一个死锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程计算0-100 0-200
- 下一篇: JavaScript-使用WeakMap