美文网首页
死锁,活锁,饿死

死锁,活锁,饿死

作者: 得力小泡泡 | 来源:发表于2021-01-06 19:06 被阅读0次

死锁:线程1等待线程2互斥持有的资源,而线程2也在等待线程1互斥持有的资源,两个线程都无法继续执行。

活锁:拿到锁的线程持续重试一个总是失败的操作,导致无法继续执行。

饿死:线程一直被调度器延迟访问其赖以执行的资源,也许是调度器先于低优先级的线程而执行高优先级的线程,同时总是会有一个高优先级的线程可以执行,饿死也叫无限延迟。

以上是在Java并发中会遇到的三种情况,一个死锁程序:

public class MyTest6 {
    private Object lock1 = new Object();

    private Object lock2 = new Object();

    public void myMethod1() {
        synchronized (lock1) {
            synchronized (lock2) {
                System.out.println("myMethod1 invoked");
            }
        }
    }

    public void myMethod2() {
        synchronized (lock2) {
            synchronized (lock1) {
                System.out.println("myMethod2 invoked");
            }
        }
    }

    public static void main(String[] args) {
        MyTest6 myTest6 = new MyTest6();

        Runnable runnable1 = () -> {
            while (true) {
                myTest6.myMethod1();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        Thread thread1 = new Thread(runnable1, "myThread1");

        Runnable runnable2 = () -> {
            while (true) {
                myTest6.myMethod2();
                try {
                    Thread.sleep(250);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        Thread thread2 = new Thread(runnable2, "myThread2");

        thread1.start();
        thread2.start();
    }
}

相关文章

  • 死锁、活锁、饿死

    死锁 是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将...

  • 死锁,活锁,饿死

    死锁:线程1等待线程2互斥持有的资源,而线程2也在等待线程1互斥持有的资源,两个线程都无法继续执行。 活锁:拿到锁...

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • 死锁,活锁,饿死,阻塞的理解

    原文链接:死锁和活锁,饿死,阻塞个人理解 死锁 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占...

  • 死锁和活锁,饿死,阻塞个人理解

    原链接:http://f.dataguru.cn/thread-541686-1-1.html 以下个人理解,请各...

  • 死锁-活锁

    死锁大家都知道,但是 有没有老铁 知道活锁呢?我在看《并发编程实战》的时候 了解到这个名次 活锁 活锁 是指 活锁...

  • 高并发编程-05-活跃性问题

    死锁,饥饿,活锁 1,死锁 多个线程,各自占对方的资源,都不愿意释放,从而造成死锁 工具:使用jconsole可以...

  • 死锁、活锁、饥饿锁、无锁

    1. 死锁 多个线程之间相互争夺资源,而又相互等待对方释放资源,此时线程阻塞出现假死状态,形成死锁。 1.1 死锁...

  • 死锁、活锁、饥饿锁、无锁

    死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地...

  • 每日一技|活锁,也许你需要了解一下

    前两天看极客时间 Java 并发课程的时候,刷到一个概念:活锁。死锁,倒是不陌生,活锁却是第一次听到。 在介绍活锁...

网友评论

      本文标题:死锁,活锁,饿死

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