zoukankan      html  css  js  c++  java
  • 手写死锁程序实例

    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

  • 相关阅读:
    SD_WebImage-03-多线程+下载任务放入非主线程执行
    NSOperationQueue_管理NSOperation-02-多线程
    CALayer小结-基本使用00-UI进阶
    XMPP-UI进阶-01
    XMPP总结-UI进阶-00
    UI控件总结-UI初级
    转场动画-01-day4
    暂停-开始动画-核心动画-08-day4
    核心动画-04-CALayer隐式动画
    Android开发技术周报 Issue#71
  • 原文地址:https://www.cnblogs.com/yayin/p/14208891.html
Copyright © 2011-2022 走看看