zoukankan      html  css  js  c++  java
  • 多线程-死锁

    1.什么是死锁?

    两个或2个以上进程在执行过程中,因为争夺资源而造成一种互相等待的现象,如果没有外力干涉,他们无法在执行下去。

    2.产生死锁原因:

    1.系统资源不足
    2.进程运行推进顺序不合适
    3.资源分配不当

     代码如下:

    public class DeadLock {
    
        public static void main(String [] args) {
            Object o1 = new Object();
            Object o2 = new Object();
    
            new Thread(() -> {
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName() +"持有锁o1,试图获取锁o2");
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o2) {
                        System.out.println(Thread.currentThread().getName() +"获取锁o2");
                    }
                }
            },"A").start();
    
            new Thread(() -> {
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName() +"持有锁o2,试图获取锁o1");
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o1) {
                        System.out.println(Thread.currentThread().getName() +"获取锁o1");
                    }
                }
            },"B").start();
        }
    }

    结果:

    3.验证是否是死锁?

    1.jps -l  
    2.jstack  进程号

     

  • 相关阅读:
    用IIS做宿主的WCF服务
    Apache+mono+xsp搭建Linux下的asp.net平台
    web页面中的卡片布局代码
    GridView内的数据循环滚动
    adb 无法启动问题
    User interface
    动态生成linearLayout
    跳转到下一个activity
    android studio 快捷键
    [转]项目失败的经验
  • 原文地址:https://www.cnblogs.com/liuyi13535496566/p/15026026.html
Copyright © 2011-2022 走看看