死锁案例演示
【摘要】 @[toc] 1、什么是死锁两个或两个以上进程在执行过程中,因为争夺资源而造成一种互相等待的现象,如果没有外力干涉,它们无法再执行下去。 2、产生死锁的原因系统资源不足进程运行推进顺序不合适资源分配不当 3、死锁演示import java.util.concurrent.TimeUnit;/** * 演示死锁 */public class DeadLock { //创建两个对象 ...
@[toc]
1、什么是死锁
两个或两个以上进程在执行过程中,因为争夺资源而造成一种互相等待的现象,如果没有外力干涉,它们无法再执行下去。
2、产生死锁的原因
- 系统资源不足
- 进程运行推进顺序不合适
- 资源分配不当
3、死锁演示
import java.util.concurrent.TimeUnit;
/**
* 演示死锁
*/
public class DeadLock {
//创建两个对象
static Object a = new Object();
static Object b = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (a) {
System.out.println(Thread.currentThread().getName()+" 持有锁a,试图获取锁b");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (b) {
System.out.println(Thread.currentThread().getName()+" 获取锁b");
}
}
},"A").start();
new Thread(()->{
synchronized (b) {
System.out.println(Thread.currentThread().getName()+" 持有锁b,试图获取锁a");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (a) {
System.out.println(Thread.currentThread().getName()+" 获取锁a");
}
}
},"B").start();
}
}
4、验证是否是死锁
可以使用jps命令查看进程,再用jvm自带的堆栈跟踪工具jstack查看
可以看到需要验证的进程id为10840
然后执行命令jstack 10840
可以看到 B持有锁b 试图获取锁a
A持有锁a,试图获取锁b
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)