死锁

java-教程王 Java教程 发布时间:2021-10-15 17:39:39 阅读数:9388 1
下文讲述死锁的相关知识简介说明,如下所示:
我们将两个或多个线程阻塞等待其它线程处于死锁状态的线程所持有的锁,这种现象我们称之为“死锁”
死锁通常放生在多个线程按照不同的顺序访问同一组锁资源时发生
例:
 线程1锁住了A,然后尝试对B进行加锁
 同时线程2已经锁住了B
   接着尝试对A进行加锁
   以上的情况就产生了死锁
 -----------------------------------  
 线程1永远得不到B,线程2也永远得不到A
  它们将永远阻塞下去
  这种现象就是一个死锁
例:
public class TreeNode {
    TreeNode parent   = null; 
    list children = new ArrayList();

    public synchronized void addChild(TreeNode child){
        if(!this.children.contains(child)) {
            this.children.add(child);
            child.setParentOnly(this);
        }
    }

    public synchronized void addChildOnly(TreeNode child){
        if(!this.children.contains(child){
            this.children.add(child);
        }
    }
   

    public synchronized void setParent(TreeNode parent){
        this.parent = parent;
        parent.addChildOnly(this);
    }
 

    public synchronized void setParentOnly(TreeNode parent){
        this.parent = parent;
    }
}
当线程1调用parent.addChild(child)方法的同时有另外一个线程2调用child.setParent(parent)方法
两个线程中的parent表示的是同一个对象,child亦然,此时就会发生死锁
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202110/1483.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者