在java程序中怎么造成死锁_java – 了解为什么在此实现中发生死锁
我是多线程的新手,我遇到了这个例子:
public class TestThread {
public static Object Lock1 = new Object();
public static Object Lock2 = new Object();
public static void main(String args[]) {
ThreadDemo1 T1 = new ThreadDemo1();
ThreadDemo2 T2 = new ThreadDemo2();
T1.start();
T2.start();
}
private static class ThreadDemo1 extends Thread {
public void run() {
synchronized (Lock1) {
System.out.println("Thread 1: Holding lock 1...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (Lock2) {
System.out.println("Thread 1: Holding lock 1 & 2...");
}
}
}
}
private static class ThreadDemo2 extends Thread {
public void run() {
synchronized (Lock2) {
System.out.println("Thread 2: Holding lock 2...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 2: Waiting for lock 1...");
synchronized (Lock1) {
System.out.println("Thread 2: Holding lock 1 & 2...");
}
}
}
}
}
这会导致以下示例输出:
Thread 1: Holding lock 1...
Thread 2: Holding lock 2...
Thread 1: Waiting for lock 2...
Thread 2: Waiting for lock 1...
即,存在僵局.但是,如果我们改变在第二个线程中获得的锁的顺序,那么它现在看起来像这样:
public class TestThread {
public static Object Lock1 = new Object();
public static Object Lock2 = new Object();
public static void main(String args[]) {
ThreadDemo1 T1 = new ThreadDemo1();
ThreadDemo2 T2 = new ThreadDemo2();
T1.start();
T2.start();
}
private static class ThreadDemo1 extends Thread {
public void run() {
synchronized (Lock1) {
System.out.println("Thread 1: Holding lock 1...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (Lock2) {
System.out.println("Thread 1: Holding lock 1 & 2...");
}
}
}
}
private static class ThreadDemo2 extends Thread {
public void run() {
synchronized (Lock1) {
System.out.println("Thread 2: Holding lock 1...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 2: Waiting for lock 2...");
synchronized (Lock2) {
System.out.println("Thread 2: Holding lock 1 & 2...");
}
}
}
}
}
它按预期工作,示例输出如下所示:
Thread 1: Holding lock 1...
Thread 1: Waiting for lock 2...
Thread 1: Holding lock 1 & 2...
Thread 2: Holding lock 1...
Thread 2: Waiting for lock 2...
Thread 2: Holding lock 1 & 2...
有人可以向我解释第一个导致死锁的情况,以及为什么第二个代码的更改会修复它?
在java程序中怎么造成死锁_java – 了解为什么在此实现中发生死锁相关推荐
- java程序员遇到的问题_Java 程序员平时最常遇到的故障:系统OOM (一)
作为 Java 程序员而言,先不考虑自己系统外部依赖的缓存.消息队列.数据库等等东西挂掉,就我们自己系统本身而言,最常见的挂掉的原因是什么? 其实就是系统OOM,也就是所谓的内存溢出! 什么是内存溢出 ...
- java程序员就业发展方向_Java程序员有哪些职业发展方向?
Java程序员的职业规划是非常清晰的,可以分为下面四种方向,可以根据自身条件选择适合自己的发展方向. A.程序员. 如果你觉得你喜欢代码,喜欢开发工作,那么一直做开发也是一件的不错的事,不过要考虑当你 ...
- java程序的运行环境简称_java程序的运行环境简称为什么?
java程序的运行环境简称为JRE. Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让计算机系统运行Java应用程序(Jav ...
- java程序员接私活_Java程序员接私活的项目-JeecgBoot
Java程序员接私活的项目-JeecgBoot 近两年微服务大火,而对于Java程序员可实操的微服务框架就是SpringBoot,为什么大家都在使用微服务呢?- -第一,项目运行简单.相比较之前的 J ...
- java程序cpu突然飚高_Java 定位导致CPU飙升的代码过程
线上的一个日志实时输出的程序曾经出过这样一个问题,刚开始上线java程序占用的CPU的资源很少,但是到了整点的时候,CPU直线飙高,直接到达100%根本没有要下降的趋势,唯一的方法只能杀掉它了,后面在 ...
- java程序员必备英语词汇_java程序员常用英文单词整理
java程序员常用英文单词整理 money 金钱 price 价格 totalPrice 总价格 change 改变.变化 Unicode 统一码 ASCII ascii码表 child 孩子 run ...
- java程序运行过程数据丢失怎么办_java运行过程中OutOfMemoryError是什么原因?怎么解决...
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存在死循环或循环产生过多重复的对象实体: 4.使用的第三方软件 ...
- Java 程序员排行前 10 的错误,你有没有中?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 风一样的码农 来源| cnblogs.com/ ...
- java程序员遇到的问题_JAVA程序员最常遇见的10个异常
程序员最不想遇到黑心老板外,异常也是难以不遇,现在列出10个最遇到的异常,大家可以参考一下. NO.1 java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的 ...
最新文章
- python php区别-PHP,Python,Java写出来的WEB程序有什么区别?
- 【CV】目标检测:常用名词与mAP评价指标的引出
- 【Linux】一步一步学Linux——expr命令(265)
- Asp.net禁用site.Mobile.Master
- javascript --- 对象原型
- 90后副教授一作发Science,刷新该校历史
- java filter注入_如何在Java Filter 中注入 Service
- 范伟导老师Sniffer课程资料
- mac苹果电脑如何查看mac地址
- oracle 产看执行计划_ORACLE数据库查看执行计划的方法
- 一级域名与二级域名之间的区别
- 支付宝飞行模式/转卡/转账/h5拉起支付
- web视频(点播/直播)播放器选型
- 电磁炉的三种工作形式_单管电路_半桥电路和全桥电路
- 自门控激活函数Swish
- 房地产楼盘三维地图带来的便利
- Python代码原来还可以这样玩——画出不同人物效果图,感觉很美好
- Mandatory condition is missing
- Android 隐私合规API检查方案
- 视频插帧(Video Frame interpolation)论文及源码