Java死锁的简单例子

两个线程互相占有对方需要的资源而不释放,便形成了死锁。

代码如下:

Program.java

/**

* 程序类

* @author michael

*

*/

public class Program implements Runnable {

//两个静态的资源

public static Object obj1 = new Object();

public static Object obj2 = new Object();

//标志位

public int flag = 1; //1 or 2

@Override

public void run() {

if(flag == 1) {

synchronized (obj1) {

System.out.println("flag: " + flag + ", 锁住了资源obj1");

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("flag: " + flag + ", 等待获取资源obj2");

synchronized (obj2) {

System.out.println("flag: " + flag + ", 获得资源obj2");

}

}

} else if(flag == 2) {

synchronized (obj2) {

System.out.println("flag: " + flag + ", 锁住了资源obj2");

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("flag: " + flag + ", 等待获取资源obj1");

synchronized (obj1) {

System.out.println("flag: " + flag + ", 获得资源obj1");

}

}

}

}

}

DeadLock.java

DeadLock.java

/**

* 死锁测试.

* @author michael

*

*/

public class DeadLock {

public static void main(String[] args) {

Program p1 = new Program();

Program p2 = new Program();

p1.flag = 1;

p2.flag = 2;

new Thread(p1).start();

new Thread(p2).start();

}

}

控制台结果:

这里写图片描述

java实现死锁简单例子,Java死锁的简单例子相关推荐

  1. Java 线程死锁及如何避免死锁介绍

    线程死锁 1. 什么是线程死锁 2. 死锁产生的原因 3. 如何避免线程死锁. 1. 什么是线程死锁 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下, ...

  2. Java多线程学习之路(四)---死锁(DeadLock)

    Java多线程学习之路(四)-死锁(DeadLock) 1.定义 死锁就是多个线程在竞争共享资源的时候,相互阻塞,不能脱身的状态(个人理解).其实死锁一定程度上可以看成一个死循环. 举个现实生活中的例 ...

  3. java 活锁 线程饿死,JAVA并发编程(四)线程死锁、饥饿、活锁

    JAVA并发编程(四)线程死锁 线程死锁 什么是线程死锁呢? 为什么会线程死锁呢? 如何避免线程死锁? 什么是饥饿呢? 什么是活锁呢? 线程死锁 什么是线程死锁呢? 死锁是指两个或两个以上的线程在执行 ...

  4. java线程死锁 cpu 100%_Java死锁排查和Java CPU 100% 排查的步骤整理

    工欲善其事,必先利其器 简介 本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多:第二个是java cpu 100%排查,这个 ...

  5. java 分析java死锁_Java死锁示例–如何分析死锁情况

    java 分析java死锁 死锁是两个线程或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,它将导致死锁情况,然后我们将看到如何对其 ...

  6. Java死锁示例–如何分析死锁情况

    死锁是两个或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,该程序将导致死锁情况,然后我们将看到如何对其进行分析. Java死锁示例 ...

  7. 2. Java并发编程-互斥锁、死锁

    上一节讲了引起并发问题原因中的可见性和有序性. 通过利用Java内存模型开发者可以很好的避开上述问题. 本节我们来探索剩下的一个引起并发问题的原因:原子性. 什么是原子性? 即一个或多个操作在CPU执 ...

  8. java多线程同步与死锁_浅析Java多线程中的同步和死锁

    Value Engineering 1基于Java的多线程 多线程是实现并发机制的一种有效手段,它允许编程语言在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立 ...

  9. java并发编程第十三课 死锁

    第67讲:如何写一个必然死锁的例子? 本课时我们会首先介绍什么是死锁,死锁有什么危害和特点,然后通过代码分析一个"必然死锁的例子". 死锁是什么?有什么危害? 什么是死锁 发生在并 ...

  10. Java 对象锁和类锁 死锁(多线程synchronized关键字)

    本文主要是将synchronized关键字用法作为例子来去解释Java中的对象锁 和 类锁. 对于同步,要时刻清醒在 哪个锁对象 上同步,这是关键. 对于同步代码块,要看清楚什么对象已经用于锁定(sy ...

最新文章

  1. python中str和int区别_Python中的string方法和str方法有什么区别?
  2. iOS开发tips总结
  3. php 接口说明文档,phpwind文章中心接口说明
  4. mysql中删除某一纵的方法_sql数据库:如何在一个表中填加或者删除一个字段!...
  5. Linux下部署多个Tomcat
  6. Windows Vista SP1正式版独立安装包
  7. 转:SQL注入攻击的原理
  8. 20191207每日一句
  9. python交通调查数据处理_python数据分析--关于时间类型数据处理的一种方法
  10. 嵌入式linux 中文输入法,一种用于嵌入式Linux系统的中文拼音输入法的制作方法...
  11. SAP Open SQL
  12. 计算机专业期末总结200字,本学期自我总结200字
  13. dns域名解析原理及过程
  14. SpringMVC接受参数
  15. 网络机房搬迁的实施和经验
  16. win10 条件下在anaconda中安装face_recognition(超简单,亲测有效)
  17. 湖人VS火箭 continue....
  18. MySQL(学生表、教师表、课程表、成绩表)多表查询
  19. 面试题,你觉得产品经理的职责有哪些?
  20. PhpStorm 注册码

热门文章

  1. 前端实现纯css文本显示省略号
  2. 防薅图鉴之一薅羊毛深似海,牢底坐穿后悔晚
  3. 阿里云ubuntu安装tomcat问题
  4. 用户注册登录-交互设计分析
  5. Bluetooth技术学习笔记 ——GAP
  6. SQL案例学习-微博好友关系
  7. 我上学的时候班里有一个德国女孩儿
  8. Ruby元编程技术(Ruby Metaprogramming techniques)
  9. 如何降重计算机SCI论文的重复率? - 易智编译EaseEditing
  10. QFile和QDir