1. /**
  2. * 死锁举例
  3. * @author lenovo
  4. *
  5. */
  6. public class DeadlockTest {
  7.  
  8. private static Object obj1 = new Object();
  9. private static Object obj2 = new Object();
  10. public static void main(String[] args) {
  11. new DeadlockTest().deadLock();
  12. }
  13.  
  14. private void deadLock(){
  15.  
  16. new Thread(new Runnable(){
  17. @Override
  18. public void run() {
  19. synchronized(obj1){
  20. try {
  21. Thread.sleep(5000);
  22. System.out.println("obj1 locking");
  23. } catch (InterruptedException e) {}
  24.  
  25. synchronized(obj2){
  26. System.out.println("bbb");
  27. }
  28. }
  29. }
  30. }).start();
  31.  
  32. new Thread(new Runnable(){
  33. @Override
  34. public void run() {
  35. synchronized(obj2){
  36. try {
  37. Thread.sleep(5000);
  38. System.out.println("obj2 locking");
  39. } catch (InterruptedException e) {}
  40.  
  41. synchronized(obj1){
  42. System.out.println("aaa");
  43. }
  44. }
  45. }
  46. }).start();
  47. }
  48. }
  49. //来源:网上抄的

死锁例子2

  1. package com.loong.main;
  2. public class ThreadDeadlock {
  3.  
  4. public static void main(String[] args) throws InterruptedException {
  5. Object obj1 = new Object();
  6. Object obj2 = new Object();
  7. Object obj3 = new Object();
  8.  
  9. Thread t1 = new Thread(new SyncThread(obj1, obj2), "t1");
  10. Thread t2 = new Thread(new SyncThread(obj2, obj3), "t2");
  11. Thread t3 = new Thread(new SyncThread(obj3, obj1), "t3");
  12.  
  13. t1.start();
  14. Thread.sleep(5000);
  15. t2.start();
  16. Thread.sleep(5000);
  17. t3.start();
  18.  
  19. }
  20.  
  21. }
  22.  
  23. class SyncThread implements Runnable{
  24. private Object obj1;
  25. private Object obj2;
  26.  
  27. public SyncThread(Object o1, Object o2){
  28. this.obj1=o1;
  29. this.obj2=o2;
  30. }
  31. @Override
  32. public void run() {
  33. String name = Thread.currentThread().getName();
  34. System.out.println(name + " acquiring lock on "+obj1);
  35. synchronized (obj1) {
  36. System.out.println(name + " acquired lock on "+obj1);
  37. work();
  38. System.out.println(name + " acquiring lock on "+obj2);
  39. synchronized (obj2) {
  40. System.out.println(name + " acquired lock on "+obj2);
  41. work();
  42. }
  43. System.out.println(name + " released lock on "+obj2);
  44. }
  45. System.out.println(name + " released lock on "+obj1);
  46. System.out.println(name + " finished execution.");
  47. }
  48. private void work() {
  49. try {
  50. Thread.sleep(30000);
  51. } catch (InterruptedException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }
  56.  
  57. t1 acquiring lock on java.lang.Object@3904dd9e
    t1 acquired lock on java.lang.Object@3904dd9e
    t2 acquiring lock on java.lang.Object@28147a15
    t2 acquired lock on java.lang.Object@28147a15
    t3 acquiring lock on java.lang.Object@7605d74a
    t3 acquired lock on java.lang.Object@7605d74a
    t1 acquiring lock on java.lang.Object@28147a15
    t2 acquiring lock on java.lang.Object@7605d74a
    t3 acquiring lock on java.lang.Object@3904dd9e
  58.  
  59. // 参考:http://www.importnew.com/9668.html

死锁举例3

  1. package com.loong.main;
  2.  
  3. public class ThreadDeadLock2 {
  4.  
  5. private static Object obj1 = new Object();
  6. private static Object obj2 = new Object();
  7. public static void main(String[] args) {
  8. DeadLock2 dl1 =new DeadLock2(obj1,obj2);
  9. DeadLock2 dl2 =new DeadLock2(obj1,obj2);
  10. dl1.flag = 0;
  11. dl2.flag = 1;
  12. new Thread(dl1).start();
  13. new Thread(dl2).start();
  14. }
  15. }
  16.  
  17. class DeadLock2 implements Runnable{
  18. public int flag =0;
  19. private Object ob1;
  20. private Object ob2;
  21.  
  22. public DeadLock2(Object o1,Object o2){
  23. this.ob1 = o1;
  24. this.ob2 = o2;
  25. }
  26.  
  27. @Override
  28. public void run() {
  29. if(flag==0){
  30. synchronized(ob1){
  31. System.out.println("ob1" + "starting");
  32. try {
  33. Thread.sleep(5000);
  34. System.out.println("ob1" + "ending");
  35. } catch (InterruptedException e) {}
  36.  
  37. synchronized(ob2){
  38. System.out.println("ob2");
  39. }
  40. }
  41. }
  42. if(flag==1){
  43. synchronized(ob2){
  44. System.out.println("ob2" + "starting");
  45. try {
  46. Thread.sleep(5000);
  47. System.out.println("ob2" + "ending");
  48. } catch (InterruptedException e) {}
  49.  
  50. synchronized(ob1){
  51. System.out.println("ob1");
  52. }
  53. }
  54. }
  55. }
  56. }
    // Java线程多线程编程【尚学堂科技马士兵Java基础教程】

简单java死锁设计002的更多相关文章

  1. 一个简单的Java死锁示例(转)

    在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了 ...

  2. 最简单直接地理解Java软件设计原则之开闭原则

    写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...

  3. 数据表与简单java类映射转换

    简单的Java类的定义来源于数据表的结构, 例如:雇员信息表.部门信息表描述的就是雇员或部门的信息, 在实际的开发之中,数据表和简单java类之间的映射关系如下: 1. 数据实体表设计 = 类的定义: ...

  4. 实例详解 Java 死锁与破解死锁

    锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区.线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁:否则呢就等待,直到持有锁的线程解锁 ...

  5. Java界面设计 Swing(1)

    Java界面设计的用途 开发者可以通过Java SE开发丰富并且强大的具有图形界面的桌面应用程序.也可以设计一些提高效率的工具软件,帮助自己处理机械性工作. Java 的图形界面工具包,可以用于工具类 ...

  6. java课程设计(计算器)

    JAVA课程 设 计 报 告 1206401-18   瞿杰 一.设计时间 2013年6月 24日-----6月28日 二.设计地点 湖南城市学院实验楼计算机506机房 三.设计目的 1.巩固学习VB ...

  7. Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)

    #课程设计--博客作业教学数据分析系统(201521123084 林正晟) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 学生登陆界面的前端实现和与数据库的连接 学生 ...

  8. java课程设计--We Talk(201521123061)

    java课程设计--We Talk(201521123061) 团队博客链接:http://www.cnblogs.com/slickghost/ 数据库 一.通过Dao模式建立与数据库的连接 1.数 ...

  9. Java课程设计——猜数游戏(201521123111 陈伟泽)

    Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...

随机推荐

  1. (杭电2053)A + B Again(转换说明符)

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): ...

  2. Python写网络后台脚本

    Python写网络后台脚本. 首先安装Python3.6.5,在centos中自带的Python是2.6版本的,现在早就出现了3.6版本了况且2和3 之间的差距还是比较大的,所以我选择更新一下Pyth ...

  3. CSS 兼容iPhone X、iPhone XS及iPhone XR

    @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ra ...

  4. 十分钟搭建和使用sonarqube代码质量管理平台

    前言 Sonarqube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java.C.C++.JavaScripe等等二十几种编程语言的代码质量 ...

  5. Scala快速入门到精通 视频教程 百度云网盘下载地址

    Scala快速入门到精通  视频教程 百度云网盘下载地址 Scala快速入门到精通 下载地址链接:https://pan.baidu.com/s/1bqGIKyF 密码:ojwd

  6. nmap教程(下)

    九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...

  7. 20154327 Exp3 免杀原理与实践

    实践内容 基础问题回答 (1)杀软是如何检测出恶意代码的? 杀毒软件主要靠特征码进行查杀,匹配到即为病毒. 还有通过云查杀,查看云端库中该文件是否属于恶意代码. 跟踪该程序运行起来是否存在恶意行为,来 ...

  8. 堪称最好的A*算法(转)

    如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 中文译文转自:http://blog.c ...

  9. Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...

  10. CentOS 7.2安装11g数据库软件

      Preface       Yesterday I've installed the 11g GI software on CentOS 7.2.But I still encounter som ...