• 手写死锁程序实例


    1.定义:死锁是指多线程为了争抢资源造成的互相等待现象,如果没有外力介入,无法进行下去

    2.代码实现:

    package com.yang.test;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * 死锁示例演示
     *  死锁是指,多个线程同时争抢资源造成的相互等待现象,没有外力干预无法进行下去
     * @author yang yajun
     * @date 2020/12/2921:16
     */
    public class DeadLockExample {
    
        public static void main(String[] arg0){
            String str1="lockA";
            String str2="lockB";
            LockSource lockSource = new LockSource();
        /**
         * 开启2个线程执行execute方法,传入不同的参数,不同的对象,造成2个线程相互等待
         */
         new Thread(()->{ try { lockSource.execute(str1,str2); } catch (InterruptedException e) { e.printStackTrace(); } },"AAA").start(); new Thread(()->{ try { lockSource.execute(str2,str1); } catch (InterruptedException e) { e.printStackTrace(); } },"BBB").start(); } } /** * 资源类 * @author yang yajun * @date 2020/12/29 21:19 */ class LockSource{ /** * 写一个方法,传入2个参数,先锁第一个后再尝试获取第二个锁, * 获取不到就等着 * @author yang yajun * @date 2020/12/29 21:23 */ public void execute(String str1, String str2) throws InterruptedException { synchronized (str1){ System.out.println(Thread.currentThread().getName()+"正在锁:"+str1+",要争抢:"+str2); TimeUnit.SECONDS.sleep(2); synchronized (str2){ System.out.println("dddddd"); } } } }

    3.如何判断是死锁?——通过jstack命令查看栈信息 ,结果如下:两个线程相互等到,造成了deadlock,想要了解jstack的更多知识,请看我的另一篇博客,

       https://www.cnblogs.com/yayin/p/14185197.html

    jstack pid

  • 相关阅读:
    Linux系统配置(防火墙)
    读取数据库中的json格式的字符串数据时cJSON解析后总会出现很多反斜杠的问题
    std::map添加一个类类型
    RabbitVCS SVN:提交失败,工作副本已经锁定
    Qt输入法
    二叉树是逻辑结构 与定时 小顶堆
    Kettle 的 安装 及 简单使用
    删除 canal 实例
    /opt/module/canal/conf/canal.properties
    Mac VMware 虚拟机 对应 win 的三种 网络模式
  • 原文地址:https://www.cnblogs.com/yayin/p/14208891.html
Copyright © 2020-2023  润新知