手写死锁程序实例

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

原文地址:https://www.cnblogs.com/yayin/p/14208891.html