java死锁例子详解

来源:互联网 发布:中国历史多少年知乎 编辑:程序博客网 时间:2024/05/22 01:31

java死锁例子详解

本文给出一个简单的java死锁例子:

java代码块

package Test;public class TestDeadLock implements Runnable{     public TestDeadLock(int flag){        this.flag = flag;    }    public int flag = 1;      static Object o1=new Object(),o2=new Object();    public static void main(String[] argv){        TestDeadLock ts1 = new TestDeadLock(1);        TestDeadLock ts2 = new TestDeadLock(0);        Thread t1 = new Thread(ts1);        Thread t2 = new Thread(ts2);        t1.start();        t2.start();    }      public void run(){          System.out.println("线程"+ 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");                  }              }          }        System.out.println("线程"+ flag+"结束。。。");     }  }  

运行结果

运行结果

解决死锁的思路:

  • 资源有序分配,比如先分配o1,再o2。
  • 如果已经死锁,可以撤销线程。

预防死锁算法

银行家算法:

  • 银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
  • 但是每部操作需要保持系统安全状态

ps(安全状态)

安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

0 0
原创粉丝点击