加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

了解我的死锁Java示例

发布时间:2020-12-15 04:37:48 所属栏目:Java 来源:网络整理
导读:我试图在 java中实现死锁.线程t1和t2以相同的顺序锁定s1和s2导致死锁情况.但是,如果我注释掉Line1和Line2调用线程类的sleep方法,则不会发生死锁.我运行此程序超过15次,但删除第1行和第2行不会导致死锁. 所以我的查询是,第1行和第2行(调用Thread.sleep)是死锁
我试图在 java中实现死锁.线程t1和t2以相同的顺序锁定s1和s2导致死锁情况.但是,如果我注释掉Line1和Line2调用线程类的sleep方法,则不会发生死锁.我运行此程序超过15次,但删除第1行和第2行不会导致死锁.

所以我的查询是,第1行和第2行(调用Thread.sleep)是死锁所必需的.如果是,那么我还没有理解死锁.如果不是,它会导致其他JVM死锁吗?

//Thread DeadLock

class Threadlock 
{
 private final static  String s1="java";
 private final  static String s2="deadlock";
 public static void main(String[] args)
 {  
  Thread t1= new Thread()
  {
     public void run()
     {
      synchronized(s1)
      {
       try { Thread.sleep(100);} 
       catch (Exception e) {}  //Line 1
       synchronized(s2)
       {}
      }
     }
  };

  Thread t2= new Thread()
  {
     public void run()
     {
      synchronized(s2)
      {
        try { Thread.sleep(100);} catch (Exception e) {}  //Line 2
        synchronized(s1)
        {}
      }
     }
  };

  t2.start();
  t1.start();
  }
 }

解决方法

如果你取消睡眠,你的方法什么都不做.因此它们非常快,以至于两个线程同时进入其第一个同步块的概率非常低.但它仍然可能发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读