美文网首页
线程同步中的死锁

线程同步中的死锁

作者: 鱿鱼炸酱面 | 来源:发表于2022-01-24 09:46 被阅读0次
何为死锁

多线程各自持有不同的锁,并互相试图获取对方已持有的锁,导致无限等待的状况,称为死锁。比如:

public class DeadLock {
    public static void main(String[] args) {
        Object o1 = new ArrayList<>();
        Object o2 = new ArrayList<>();
        Thread t1 = new Thread(new MyRunnable1(o1, o2));
        Thread t2 = new Thread(new MyRunnable2(o1, o2));
        t1.start();
        t2.start();
    }
}

class MyRunnable1 implements Runnable {

    final Object o1;
    final Object o2;

    MyRunnable1(Object o1, Object o2) {
        this.o1 = o1;
        this.o2 = o2;
    }

    @Override
    public void run() {
        synchronized (o1) {
            System.out.println(Thread.currentThread().getName() + "已经获得o1的锁");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o2) {
                System.out.println("fsf");
            }
        }
    }

}

class MyRunnable2 implements Runnable {

    final Object o1;
    final Object o2;

    MyRunnable2(Object o1, Object o2) {
        this.o1 = o1;
        this.o2 = o2;
    }

    @Override
    public void run() {
        synchronized (o2) {
            System.out.println(Thread.currentThread().getName() + "已经获得o2的锁");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o1) {
                System.out.println("fsf");
            }
        }
    }

}
避免死锁

避免死锁的方法是线程获取锁的顺序要一致。

相关文章

  • 并发 :线程间同步、锁、可重入锁及互斥锁

    线程间同步 线程间同步涉及线程互斥锁; 锁(Lock)容易导致死锁,可重入锁(RLock)则不会导致死锁,但每次 ...

  • 18 多线程死锁

    多线程死锁产生的原因:在同步中嵌套同步,会出现死锁的现象。 查找到当前JVM环境变量C:\Program File...

  • iOS 多线程面试题(死锁)

    死锁 死锁就是队列引起的循环等待 1、一个比较常见的死锁例子:主队列同步 在主线程中运用主队列同步,也就是把任务放...

  • GCD

    1、同步串行队列 2、同步并行队列 3、异步串行队列 4、异步并行队列 5、死锁 主线程中创建同步串行队列 主线程...

  • java中死锁的问题

    死锁。 死锁的原因:同步中嵌套同步,多个进程同时抢到不同的锁,都在等待,互不相让 在该程序中, 假如线程0在r...

  • GCD 使用过程中的出现的死锁问题

    死锁 1、 主队列在主线程同步执行 下列代码写在 viewDidLoad 中: 上面死锁的写法是: ** 主队列...

  • 线程同步中的死锁

    死锁产生的原因以及举例,如何解决 何为死锁: 多进程或多线程中,因争夺资源而造成一种互相等待的现象,若无外部处理作...

  • 线程同步中的死锁

    何为死锁 多线程各自持有不同的锁,并互相试图获取对方已持有的锁,导致无限等待的状况,称为死锁。比如: 避免死锁 避...

  • GCD分析(中)

    同步函数死锁 死锁现象 主线程因为同步函数的原因等着先执⾏任务 主队列等着主线程的任务执⾏完毕再执⾏⾃⼰的任务 主...

  • Synchronized关键字详解2(对非object持锁)

    4.死锁:同步方法容易造成死锁。Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁...

网友评论

      本文标题:线程同步中的死锁

      本文链接:https://www.haomeiwen.com/subject/sgqbhrtx.html