Java的死锁的例子
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/*
* DESCRIPTION :
* USER : zhouhui
* DATE : 2017/8/2 10:12
*/
public class DeadLockDemo {
public static void main(String[] args) {
//分别定义两个被锁的对象
Entity entity1 = new Entity("entity1");
Entity entity2 = new Entity("entity2");
//定义两个线程,并设置不同的名字
new Thread(new MyR(entity1,entity2),"Thread 1").start();
new Thread(new MyR(entity2,entity1),"Thread 2").start();
}
}
class MyR implements Runnable{
private Entity entity1;
private Entity entity2;
public MyR(Entity entity1,Entity entity2){
this.entity1 = entity1;
this.entity2 = entity2;
}
public void run() {
System.out.println(Thread.currentThread().getName() + "尝试获得"+entity1.getName()+"的锁");
synchronized (entity1){//尝试获得第一个锁
System.out.println(Thread.currentThread().getName() + "获得"+entity1.getName()+"的锁");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "尝试获得"+entity2.getName()+"的锁");
synchronized (entity2){//尝试获得第二个锁
System.out.println(Thread.currentThread().getName() + "获得"+entity2.getName()+"的锁");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
/**
* 定义一个锁的对象,为了方便区分定义一个name区分对象
*/
class Entity{
private String name;
public Entity(String name) {
this .name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
|
打印结果:
1
2
3
4
5
6
|
Thread 1 尝试获得entity1的锁
Thread 2 尝试获得entity2的锁
Thread 1 获得entity1的锁
Thread 2 获得entity2的锁
Thread 2 尝试获得entity1的锁
Thread 1 尝试获得entity2的锁
|
Java的死锁的例子相关推荐
- java 线程死锁简单例子_java 多线程死锁详解及简单实例
java 多线程死锁 相信有过多线程编程经验的朋友,都吃过死锁的苦.除非你不使用多线程,否则死锁的可能性会一直存在.为什么会出现死锁呢?我想原因主要有下面几个方面: (1)个人使用锁的经验差异 (2) ...
- java实现死锁简单例子,Java死锁的简单例子
Java死锁的简单例子 两个线程互相占有对方需要的资源而不释放,便形成了死锁. 代码如下: Program.java /** * 程序类 * @author michael * */ public c ...
- Java多线程--死锁例子
package qzy.thread.deadLock;/*** @描述模拟死锁** 形成死锁的四个必要条件是什么** 1.互斥条件:线程(进程)对于所分配到的资源具有排它性,即一个资源只能被一个线程 ...
- Java多线程学习四十:如何写一个必然死锁的例子
死锁是什么?有什么危害? 什么是死锁 发生在并发中 首先你要知道,死锁一定发生在并发场景中.我们为了保证线程安全,有时会给程序使用各种能保证并发安全的工具,尤其是锁,但是如果在使用过程中处理不得当,就 ...
- java产生死锁的主要原因_详解java中产生死锁的原因及如何避免
1. Java中导致死锁的原因 Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2 ...
- java多线程--死锁
1. Java中导致死锁的原因 Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2 ...
- java volatile 死锁_Java 多线程:volatile 变量、happens-before 关系及内存一致性
原标题:Java 多线程:volatile 变量.happens-before 关系及内存一致性 来源:ImportNew - paddx 更新 请参考来自 Jean-philippe Bempel ...
- 面试官:手写一个必然死锁的例子?一顿操作猛如虎。。
来源:blog.csdn.net/xiewenfeng520/article/details/107230996 前言 只对死锁代码感兴趣的可以直接跳到第三小节 必然死锁示例,如果对死锁还不太了解的, ...
- java jstack 死锁_用jstack找死锁
java死锁主要依靠jstack命令来查找. 检测jstack 先配置好jdk环境变量,打开一个终端命令行,输入jstack回车.如果看到如下的字样,说明jstack是可用的. Usage: jsta ...
最新文章
- Oracle 物理结构(六) 文件-数据文件
- BZOJ4373: 算术天才⑨与等差数列
- _ZNote_Chrom_插件_Chrom运行Android软件_APK
- js和css被屏蔽了,拦截器 Filter ,js、css、image等静态资源不被拦截解决方案
- swift2.2的新特性
- flink 异步io使用
- 【BCVP】实现基于 Redis 的消息队列
- 操作系统进程调度算法图解(FCFS、轮转、SPN、SRT、HRRN、反馈)
- springboot 插入返回id_Spring Boot实现分布式微服务开发实战系列(七)
- Yiic执行php脚本
- 3G牌照发放脚步渐近 三大运营商提速布局3G
- 高等数学第六版下册答案
- 联想y430完全拆机图解_联想Y430P笔记本拆机加内存和SSD图文教程
- SYN FLOOD WINCAP
- rgb转换 css 字体
- C++函数的定义与使用
- 明日之后到底要不要加营地?不加营地能玩吗?
- Windows XP SP3 IIS HTTP 500 - 内部服务器错误解决
- vscode的seting配置
- 【Java】浅谈Swing概况及简单窗口的构建