java 中死锁问题的实例详解

作者:CC小观 时间:2022-08-18 02:22:39 

java 中死锁问题的实例详解

先看代码在做解释


public class DeadLock implements Runnable{
 String a;
 String b;
 boolean flag;
 public DeadLock(String a,String b,boolean flag){
   this.a=a;
   this.b=b;
   this.flag=flag;
 }
 public void run(){
   if(flag){
//     while(true){
         synchronized(a){
           System.out.println("锁a");
           synchronized(b){
             System.out.println("锁b----");
           }
         }
//       }
   }else{
//   while(true){
       synchronized(b){
         System.out.println("锁b");
         synchronized(a){
           System.out.println("锁a----");
         }
       }
//     }
   }
 }

public static void main(String[] args){
 String a=new String("a");
 String b=new String("b");
 DeadLock d1=new DeadLock(a,b,true);
 DeadLock d2=new DeadLock(a,b,false);
 Thread t1=new Thread(d1);
 Thread t2=new Thread(d2);
 t1.start();
 t2.start();
 System.out.println("欢声笑语中打出GG");
 }

}

以上是代码部分,如果没有死锁,可以在if下加while(true),必然死锁,下面来做说明。

这个仅仅是为了理解死锁和面试用的,创建两个对象a和b只是为了作为死锁的对象而用,线程t1运行(t1.start()),线程t1拿到锁a后,需要继续执行,拿到锁b,而线程t2运行(t2.start()),拿到锁b,想继续拿到锁a继续执行,这就形成死锁,互相持有对面所需要的锁对象。

如果面试,可以简单记下,两个线程,两个锁对象,锁互相嵌套,最少两种状态,同时执行,一次不行就多次,也可锁外面加循环,让线程多次运行,就会死锁,因为运行一次,可能存在偶然,第一个线程执行完了,锁对象释放了,第二个线程才进来执行,如此就有偶然现象。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/qq_37347341/article/details/77685590

标签:java,死锁
0
投稿

猜你喜欢

  • JavaWeb中导出excel文件的简单方法

    2023-11-13 02:41:43
  • winform导出dataviewgrid数据为excel的方法

    2023-09-25 15:01:38
  • Java实现抢红包功能

    2021-08-05 07:47:58
  • Windows+Apache+resin配置

    2023-10-16 08:53:07
  • SpringBoot实现动态定时任务的示例代码

    2022-06-22 19:27:39
  • Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    2023-11-23 08:23:43
  • 详解Java接口签名(Signature)实现方案

    2022-02-05 09:28:57
  • C#预定义的基础类型转换

    2023-08-13 03:14:16
  • Jenkins安装以及邮件配置详解

    2023-04-20 12:42:39
  • java jdbc连接和使用详细介绍

    2023-01-13 18:12:52
  • Flutter实现抽屉动画

    2023-06-18 01:49:19
  • 字符串内存驻留机制详解示例

    2023-09-24 04:09:32
  • Spring Security基于JWT实现SSO单点登录详解

    2022-02-28 10:56:55
  • Spring Boot利用JSR303实现参数验证的方法实例

    2022-07-28 20:36:26
  • Java异常处理中同时有finally和return语句的执行问题

    2022-08-14 15:28:30
  • JAVA使用Gson解析json数据实例解析

    2021-08-23 14:50:56
  • Spring Boot教程之提高开发效率必备工具lombok

    2021-08-23 11:12:43
  • 深入解析Java中ThreadLocal线程类的作用和用法

    2022-01-12 09:03:15
  • java实现倒序读取文件功能示例分享

    2023-07-12 09:23:54
  • Java BigDecimal和double示例及相关问题解析

    2023-01-31 10:54:01
  • asp之家 软件编程 m.aspxhome.com