【好记性不如烂笔头】死锁之java代码

简介: 死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

 1 public class DeadLock {
 2     public static void main(String[] args) {
 3         MyThread m=new MyThread();
 4         /*创建两个线程*/
 5         Thread t1=new Thread(m);
 6         Thread t2=new Thread(m);
 7         /*线程开始运作*/
 8         t1.start();
 9         t2.start();
10     }
11 
12 }
13 class MyThread implements Runnable{
14     /*设立标志位,目的是让两个线程分别进入if-else的两个分支*/
15     public boolean flag=true;
16     @Override
17     public void run() {
18         // TODO Auto-generated method stub
19         if(flag){
20             /*flag一开始为真,线程t1进入if分支,然后讲flag置假,让接下来的线程进入else分支*/
21             flag=false;
22             while(true)
23                 synchronized (this) {
24                     synchronized (this.getClass()) {
25                         System.out.println(Thread.currentThread().getName()+"true");
26                         try { Thread.sleep(50); } catch (Exception e) {  e.printStackTrace();  } 
27                     }
28                 }
29         }else{
30             /*t2线程进入该分支,进入死循环*/
31             while(true)
32                 synchronized (this.getClass()) {
33                     synchronized (this) {
34                         System.out.println(Thread.currentThread().getName()+"false");
35                         try { Thread.sleep(50); } catch (Exception e) {  e.printStackTrace();  } 
36                     }
37                 }
38         }
39     }
40     
运行结果:
1
Thread-0true 2 Thread-0true 3 Thread-0true 4 Thread-0true 5 Thread-1false 6 Thread-0true 7 Thread-0true 8 Thread-0true 9 Thread-0true 10 Thread-1false 11 Thread-1false 12 Thread-0true 13 Thread-0true 14 Thread-0true 15 Thread-0true 16 Thread-0true 17 Thread-1false

实现死锁的思路:两个线程,分别进入AB两个分支,AB分支的锁是互相嵌套的,设立线程休眠的点应该拥有这样的情况,A拥有B的锁,B拥有A的锁,来吧~互相伤害,哈哈。

黑夜给了我黑色的眼睛,我却用它寻找光明
目录
相关文章
|
24天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
48 1
|
2月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
73 2
|
2月前
|
存储 Java API
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
134 2
|
2月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
90 1
|
1月前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
43 5
Java反射机制:解锁代码的无限可能
|
10天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
1月前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
106 10
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
66 3
|
1月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
1月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别