在实际编程中,要尽量避免死锁情况的出现,但是有些面试中故意让你写一个死锁的程序,这似乎也不太简单(有些公司会出这样的面试题),下面讲解一个简单的死锁例子。

代码说明:

第一步: 当DeadLock的线程对象td1的属性flag为1时,第一个线程先锁定资源O1,睡眠500毫秒,然后尝试锁定资源O2(假如没有被锁定的话);
第二步:而第一个线程在睡眠的时候,第二个线程对象td2启动了,其属性flag为0,它首先锁定资源O2,然后睡眠500毫秒,尝试锁定资源O1,但是此时第一个线程已锁定资源O1,它只能等待;

以上两步带来的后果即:
* T1睡眠结束后需要锁定O2才能继续执行,而此时O2已被T2锁定;
* T2睡眠结束后需要锁定O1才能继续执行,而此时O1已被T1锁定;
* T1、T2相互等待,都需要对方锁定的资源才能继续执行,从而死锁。

class DeadLock implements Runnable {public int flag = 1;static Object o1 = new Object(), o2 = new Object();@Overridepublic void run() {System.out.println("flag=" + flag);if (flag == 1) {synchronized (o1) {try {Thread.sleep(500);} catch (Exception e) {e.printStackTrace();}synchronized (o2) {System.out.println("1");}}}if (flag == 0) {synchronized (o2) {try {Thread.sleep(500);} catch (Exception e) {e.printStackTrace();}synchronized (o1) {System.out.println("0");}}}}public static void main(String[] args) {DeadLock td1 = new DeadLock();DeadLock td2 = new DeadLock();td1.flag = 1;td2.flag = 0;new Thread(td1).start();new Thread(td2).start();}
}

【代码示例】 一个简单的Java死锁相关推荐

  1. 一个简单的Java EEDocker示例

    本文讲的是一个简单的Java EE&Docker示例,[编者的话]学习Docker的最好办法就是迅速在工作中应用它,本文作者使用Docker部署了一个Java EE应用,非常简单和方便.需要注 ...

  2. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  3. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  4. idea建立一个java工程_IntelliJ IDEA(三、各种工程的创建 -- 之一 -- 创建一个简单的Java工程)...

    一.创建一个简单的Java工程:HelloWorld 1. Eclipse的第一步是选择工作空间,然后创建项目: IDEA不同(没有工作空间的概念),第一步就直接创建具体的项目,项目创建过程中会选择在 ...

  5. 编写一个java_Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  6. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  7. ava入门篇——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  8. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  9. 一个简单的Java程序:My first Java!

    ** 这是一个简单的Java程序 当我们安装完java,构建好环境变量,安装完Eclipse IDE之后,就可以编写我们的第一个java程序了. 进入Eclipse后,我们先见一个java项目,命名为 ...

最新文章

  1. 程序猿老公去米国参加 WWDC,顺便想带渡老婆蜜月,如何办签证?
  2. 【Android 属性动画】属性动画 Property Animation 简介 ( 属性动画简介 | 属性动画特性 )
  3. 由浅入深:自己动手开发模板引擎——置换型模板引擎(三)
  4. chrome安装或者重装 【windows】
  5. 七牛云 php sdk 安装,linux下Composer安装,通过Composer安装七牛云SDK
  6. 有规律字段拆分(2005的解决方案)
  7. 基于Servlet3.0的编程式SpringMVC实例详解
  8. 20161212 输出1到n之间所有的奇(单)数(n30000) 。
  9. POS-商户手续费-从生活剖析,通俗易懂
  10. 20160205 - Windows 10 家庭版没有组策略
  11. linux 硬盘合并使用方法,Linux硬盘合并的实现代码
  12. BurpSuite2021 -- 目标模块(Target)
  13. SecTalks: BNE0x00 - Minotaur靶机
  14. 制作docker容器镜像
  15. 工具 | Charles对Chrome浏览器抓包
  16. JS读取cookie(记住账号密码)
  17. 手动挡五个档位示意图_1至5档位速度范围,手动挡五个档位示意图
  18. 15秒的倒计时和15分钟的倒计时
  19. 《软件技术基础》之《同步》
  20. MATLAB基本语法详解

热门文章

  1. 网易青果后端系统设计窥探(含直播方案踩坑往事)
  2. eclipse远程调试失败
  3. layui 实现图片上传和预览
  4. AI大神贾扬清确认将离开Facebook,加入阿里硅谷研究院
  5. html----input标签
  6. 如何使用CSS创建巧妙的动画提示框
  7. 最简单的一个java驱动jdbc链接mysql数据库
  8. Node.js 代码阅读笔记系列(0)Timer 的实现
  9. Android-RelativeLayout布局技巧(一)
  10. 正则表达式提取字符串内所有的img标签下的src路径