首页 > 其他分享 >手写死锁&&死锁的原因是什么?如何快速定位死锁?如何避免死锁

手写死锁&&死锁的原因是什么?如何快速定位死锁?如何避免死锁

时间:2023-07-17 10:56:33浏览次数:43  
标签:Thread synchronized Object System 死锁 && 手写 out

一个简单的死锁案例:

package mylock;

public class DeadlockExample {
    public static void main(String[] args) {
        final Object resource1 = new Object();
        final Object resource2 = new Object();

        // 线程1占用资源1,等待资源2
        Thread thread1 = new Thread(() -> {
            synchronized (resource1){
                System.out.println("Thread 1: 持有资源 1");

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (resource2){
                    System.out.println("Thread 1: 持有资源 2");
                }
            }
        });

        Thread thread2 = new Thread(() -> {
            synchronized (resource2){
                System.out.println("Thread 2: 持有资源 2");

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (resource1){
                    System.out.println("Thread 2: 持有资源 1");
                }
            }
        });

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


}

转载:https://www.bilibili.com/video/BV1Ts4y1z7mv/?spm_id_from=333.337.top_right_bar_window_history.content.click&vd_source=46d50b5d646b50dcb2a208d3946b1598

标签:Thread,synchronized,Object,System,死锁,&&,手写,out
From: https://www.cnblogs.com/chenyi502/p/17559396.html

相关文章

  • 死锁、活锁
    Java死锁是指两个或多个线程被无限期地阻塞,等待对方释放其持有的资源,导致程序无法继续执行下去的现象。Java死锁通常发生在多个线程之间,其中一个线程持有某个资源,但是同时需要另一个资源,但是该资源被其他线程持有,导致它无法继续执行。为了避免死锁,Java提供了一些机制来避免和解决......
  • 数据库死锁原因以及解决
    有一篇讲了mvcc的基本原理:https://www.cnblogs.com/benjerry/p/17551031.html这样就知道最简单的死锁产生原因,就是有两个并发事务,事务1先更新a表某行数据,再更新b表某行数据,事务2先更新b表同行数据,再更新a表同行数据,就非常有可能死锁了。还有种写法,selectforupdate,将共享锁上升......
  • React18内核探秘:手写React高质量源码迈向高阶开发
    第1章课程简介试看1节|8分钟导学介绍课程内容,及你所获得~第2章登高望远,手写源码前的思想准备8节|54分钟建立全局观,为后续在源码中吸取精华做好思想准备,避免就源码而分析源码。第3章原始版-初始化渲染:实现最原始的渲染过程11节|122分钟实现初次渲染的基础逻辑,初步体验......
  • 161.手写一个jsonp
    161.手写一个jsonpfunctionjsonp(url,params,callback){//判断是否含有参数letqueryString=url.indexOf("?")===-1?"?":"&";//添加参数for(varkinparams){if(params.hasOwnProperty(k)){queryString+=......
  • C# 手写识别方案整理
    书写识别,网上的大佬们都有输出。书写识别存在的2个问题:直接拿官网的案例(将WindowsInk笔划识别为文本和形状-Windowsapps|MicrosoftLearn),会发现输出准确度不高。另外如果书写过快,词组识别也是个问题,毕竟无法准确分割字之间的笔迹。我结合之前开发经验,整理下书写识别......
  • 可以彻底告别手写正则表达式了
    这篇文章的目的是让你能得到完美的正则表达式,而且还不用自己拼。说到正则表达式,一直是令我头疼的问题,这家伙一般时候用不到,等用到的时候发现它的规则是一点儿也记不住,\d表示一个数字,\s表示包括下划线在内的任意单词字符,也就是 [A-Za-z0-9_],还有[\s\S]*可以匹配包括换行在内的任......
  • 告别手写正则表达式了
    可以彻底告别手写正则表达式了这篇文章的目的是让你能得到完美的正则表达式,而且还不用自己拼。说到正则表达式,一直是令我头疼的问题,这家伙一般时候用不到,等用到的时候发现它的规则是一点儿也记不住,\d表示一个数字,\s表示包括下划线在内的任意单词字符,也就是[A-Za-z0-9_],还有[\s......
  • Java之多线程的同步和死锁
    设计模式中的单例模式的懒汉方式会存在多线程的安全问题;通过以下测试代码可以看到两个线程中得到的并不是同一个单例对象;@TestpublicvoidunsafeSingleInstanceTest()throwsInterruptedException{AtomicReference<UnSafeSingleInstance>s1=newAtomicRe......
  • Dubbo 我手写几行代码,就把通信模式给你解释清楚!
    作者:小傅哥博客:https://bugstack.cn原文:https://bugstack.cn/md/road-map/road-map.html沉淀、分享、成长,让自己和他人都能有所收获!......
  • 死锁问题定位与分析
    死锁问题定位与分析一.环境搭建1.准备脚本,执行压测2.用jstack打印日志jstack112759>dead.log3.下载日志到本地szdead.log二.问题定位1.打开dead.log搜索deadlock2.查看死锁的线程3.查看死锁位置三.问题分析1.下载死锁的类文件SzCaseController.class2.使用......