首页 > 编程语言 >【Java】线程的死锁

【Java】线程的死锁

时间:2022-10-27 15:02:59浏览次数:78  
标签:Java synchronized s2 s1 死锁 线程 append

1.死锁

不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。
image

说明:
出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。
因此使用同步时,要避免出现死锁问题。

public class DeadLock {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer(); //资源1
        StringBuffer s2 = new StringBuffer();  //资源2

//线程A
        new Thread(){
            @Override
            public void run(){
                synchronized (s1){   //获得资源1的监视器锁
                    s1.append("a");
                    s2.append("1");
                    try {	//让线程 A 休眠 1s 为的是让线程 B 得到CPU执行权
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (s2){  //休眠结束想要请求资源2
                        s1.append("b");
                        s2.append("2");

                        System.out.println(s1);
                        System.out.println(s2);
                    }
                }
            }
        }.start();

//线程B
        new Thread(){
            @Override
            public void run(){
                synchronized (s2){  ////获得资源2的监视器锁
                    s1.append("c");
                    s2.append("3");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (s1){
                        s1.append("d");
                        s2.append("4");
                        System.out.println(s1);
                        System.out.println(s2);
                    }
                }
            }
        }.start();
    }
}

参考链接:什么是线程死锁?形成条件是什么?如何避免?

标签:Java,synchronized,s2,s1,死锁,线程,append
From: https://www.cnblogs.com/zhishu/p/16832248.html

相关文章

  • VS Code 配置JAVA环境
    1.首选添加如中文不好可先添加中文语言包,2.添加DebuggerforJava3.添加ExtensionPackForJava4。添加LanguageSupportfor Java至此,简单的学习环境已可以 ......
  • Java8新特性3:Stream流
    回顾之前《JavaSE-23.2》:https://www.cnblogs.com/yppah/p/14900824.htmlhttps://www.cnblogs.com/yppah/p/14900829.htmlhttps://www.cnblogs.com/yppah/p/14900834.ht......
  • IDEA在多线程环境下断点调试-验证synchronized监视锁的运行状态
    场景Java中数据同步-synchronized关键字与Mointor的使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126743812上面简单介绍synchronized的使用,如果在I......
  • Java多线程(4):ThreadLocal
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~​为了提高CPU的利用率,工程师们创造了多线程。但是线程们说:要有光!(为了减少线程创建(T1启动)和销毁(T3切换)的时间),于是工程师们......
  • 【idea】创建一个java项目
    1、文件-新建-项目-选择java模块选择SDK   2、下一步   3、输入项目名称和项目位置,点击完成  4、打开新建项目     5、在src目录......
  • 使用 WxJava 发布公众号图文
    一个Demo,记录一下发布公众号图文时需要用到的接口公众号开发时需用到的一些网站微信官方文档平台,开发公众号只用查看公众号那一块微信公众平台接口测试帐号申请,申......
  • JAVA---4种内部类
    1.局部内部类java类的五个特性:属性,方法,构造器,代码块,内部类 2.匿名内部类  3.成员内部类    4.静态内部类       小结 ......
  • 基于Java websocket的公共聊天程序
    实验中使用的是tomcat的websocket,由于程序部署到apache-tomcat-8.5.24上,所以只需额外添加消息Json解析包:json-org。实际使用中注意修改目标地址:ws://localhost:8080/GameDem......
  • Servlet的线程安全问题
    文章目录​​Servlet的线程安全问题​​​​引入​​​​Servlet的多线程机制​​​​如何修复​​​​1.实现SingleThreadModel接口​​​​2.避免使用成员变量​​​​3......
  • [Java代码审计]javacon WriteUp
    文章目录​​写在前面​​​​javacon​​写在前面在P神星球看到的,这里学习一下,文件在​​https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPS......