一个简单的java僵局演示示例
JAVA 一个 简单 示例 演示
2023-09-27 14:27:02 时间
在实际编程,为了避免死锁情况,但是,让你写一个有用的程序死锁似几乎不要太简单(种面试题),下面是一个简单的死锁样例。
线程的同步化可能会造成死锁,死锁发生在两个线程相互持有对方正在等待的东西(实际是两个线程共享的东西)。仅仅要有两个线程和两个对象就可能产生死锁。
package sxh.java.lock; /** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候还有一个flag==0的对象(td2)线程启动,先锁定o2,睡眠500毫秒 * td1睡眠结束后须要锁定o2才干继续运行,而此时o2已被td2锁定。 * td2睡眠结束后须要锁定o1才干继续运行。而此时o1已被td1锁定; * td1、td2相互等待,都须要得到对方锁定的资源才干继续运行,从而死锁。 */ public class DeadLock implements Runnable { public int flag = 1; //静态对象是类的全部对象共享的 private static Object o1 = new Object(), o2 = new Object(); @Override public 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; //td1,td2都处于可运行状态,但JVM线程调度先运行哪个线程是不确定的。//td2的run()可能在td1的run()之前运行 new Thread(td1).start(); new Thread(td2).start(); } }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
相关文章
- Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript
- 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement
- Java-Web中访问某个指定工程中的文件,报错后发现访问的文件是另一个工程里面的文件
- java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)
- 利用 Docker 构建一个简单的 java 开发编译环境
- 推荐一个超级简单 Java 图形验证码模块
- 26dwr - DWR中的JavaScript(创造一个与 Java 对象匹配的 Javascript 对象)
- JAVA单元测试框架-8-dependsOnMethods与dependsOnGroups
- 一个更适合Java初学者的轻量级开发工具:BlueJ
- 《Java遗传算法编程》—— 2.9 小结
- Java的一个关于“星球”的枚举
- Java的静态成员类
- Java经典实例:实现一个简单堆栈
- 消灭Java代码的“坏味道”
- 还不知道如何在java中终止一个线程?快来,一文给你揭秘
- 一个电脑的重装到java开发环境安装配置的全过程
- java导出txt文件
- 编辑一个简单计算机界面并响应(java)
- 一个Java的权限框架-Shiro
- Java开源内容管理CMS系统J4CMS集成到JTM
- java中一个简单的下载示例
- Java中利用keytool创建一个CA证书
- Java //PP2.6 编写一个应用程序,将英里转换为千米(1英里等于1.60935千米)。以浮点数类型读取用户输入的英里数
- Java //SR2.37 假设在程序中已经创建了一个Scanner类的对象myScanner和一个整型变量value,请编写程序提示用户输入他们的年龄,并将输入值存放到value变量中。
- Java 获取包下的所有类