死锁

只有当t1线程占用o1且正好也需要o2,t2此时占用o2且正好也需要o1的时候才会出现死锁,(类似于2个人拿着两个筷子吃饭,都是需要对方的一根筷子才能吃)

以下代码t1线程占用o1,并且获取到o2对象后才会释放o1,而t2线程先占用o2又去获取o1,而此时的o1被t1线程占用,o2被t2线程占用,t1和t2都在无限等待,就会出现死锁。

  1. package javasimple;
  2. /**
  3. * 死锁demo
  4. * @author haokui
  5. *
  6. */
  7. public class DieSynchronized {
  8. public static void main(String[] args) {
  9. /**
  10. * 创建并启动两个线程t1、t2。两个线程都要共享o1、o2两个对象
  11. */
  12. Object o1 = new Object();
  13. Object o2 = new Object();
  14. Thread t1 = new Thread(new T1(o1,o2));
  15. Thread t2 = new Thread(new T2(o1,o2));
  16. t1.start();
  17. t2.start();
  18. }
  19. }
  20. //创建两个线程类
  21. class T1 implements Runnable {
  22. Object o1;
  23. Object o2;
  24. public T1(Object o1, Object o2){
  25. this.o1 = o1;
  26. this.o2 = o2;
  27. }
  28. public void run() {
  29. //锁o1和o2
  30. synchronized (o1) {
  31. try {
  32. Thread.sleep(1000);
  33. } catch (InterruptedException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. synchronized (o2) {
  38. System.out.println("o2");
  39. }
  40. }
  41. }
  42. }
  43. class T2 implements Runnable {
  44. Object o1;
  45. Object o2;
  46. public T2(Object o1, Object o2){
  47. this.o1 = o1;
  48. this.o2 = o2;
  49. }
  50. public void run() {
  51. synchronized (o2) {
  52. try {
  53. Thread.sleep(1000);
  54. } catch (InterruptedException e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. }
  58. synchronized (o1) {
  59. System.out.println("o1");
  60. }
  61. }
  62.  
  63. }
  64. }

注意:只有o1和o2被共享的时候才会出现并发的情况,可通过构造函数的方式共享两个对象。

java实现死锁的demo的更多相关文章

  1. 如何分析Java虚拟机死锁

    Thread Dump and Concurrency Locks Thread dumps are very useful for diagnosing synchronization relate ...

  2. java的死锁学习

    学习java的死锁写的代码 也是看书上的然后自己敲了一个 <span style="font-size:18px;">package synchronization.j ...

  3. java之死锁

    转载自 https://www.cnblogs.com/xiaoxi/p/8311034.html 一.死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来 ...

  4. Ext & Java 上存图片 Demo

    Ext & Java 上存图片 Demo Ext <html> <head> <script id="microloader" type=&q ...

  5. Java 多线程异步处理demo

    java中实现多线程 1)继承Thread,重写里面的run方法 2)实现runnable接口通过源码发现:第一种方法说是继承Tread然后重写run方法,通过查看run方法的源码,发现run方法里面 ...

  6. Java 后端微信支付demo

    Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...

  7. Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例

    在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认 ...

  8. kafka_2.11-0.8.2.1+java 生产消费程序demo示例

      Kafka学习8_kafka java 生产消费程序demo示例 kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kaf ...

  9. Java线程死锁查看分析方法

    如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole        Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...

随机推荐

  1. 关于git的一些理论知识

    一.什么是版本控制器 好多刚用git的coder一说起git,就随口会说出版本控制器嘛,我问那是干嘛的,大部分人就回答上传代码的.然后会用,但是有些理论你问他们他们就不知道了,比如不是代码的文件就不能 ...

  2. php-基于面向对象的MySQL类

    class sqlHelper{ private $conn; private $host = 'localhost'; private $user = 'root'; private $pwd = ...

  3. python net-snmp 的使用

    这一年一直在做一个综合管控平台的项目,用python写的,项目春节前可能就要进行实际部署了和测试,趁着这个空闲期,回顾一下项目中用到的一些技术,第一个就是SNMP协议. 项目结构主要是实现对ipran ...

  4. fastq,sam文件一些小结(持续补充。。。)

    ST-E00211::H5L3NCCXY:::: chr14 141M = - ACTTCACCTCCTGGAGTCCTGGACTTCCCCACATCTCCCCTGCCCCTCCCACGTTTCCAT ...

  5. thinkphp3.2.3使用ajax 的一些坑——使用AjaxReturn()后,直接返回null,模板文件不起作用

    从接触thinkphp到今天,填完此坑,必有其他的坑有会冒出来.哎!这个填坑之路我想是没有尽头的了. 最近,需要使用ajax完成一些操作,一开始想Ajax简单啊,不过是一种提交数据的方式,不过是害苦了 ...

  6. 【转】String Date Calendar之间的转换

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...

  7. icon图标和文字整体居中在button按钮

    icon图标和文字整体居中在button按钮 icon图标和文字整体居中 一般我们常做的button按钮是文字居中 现在这个需要icon图标和文字一起居中在背景色 <a href="# ...

  8. shell中的循环语句while

    循环语句的结构: ------------| while 条件        | do | 需要执行的命令   | done  | -----------| 例如: 1.while一直循环 2.whi ...

  9. 地址总线、数据总线、寻址能力、字长及cpu位数等概念之间的关系

    地址总线决定了CPU的寻址能力:数据总线的宽度与字长及CPU位数一致. 详细解释见下文: 1.地址总线与寻址能力 要存取数据或指令就要知道数据或指令存放的位置,地址寄存器存储的就是CPU当前要存取的数 ...

  10. IOS 触摸事件分发机制详解

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:MelonTeam 前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案 ...