java实现死锁简单例子,Java死锁的简单例子
Java死锁的简单例子
两个线程互相占有对方需要的资源而不释放,便形成了死锁。
代码如下:
Program.java
/**
* 程序类
* @author michael
*
*/
public class Program implements Runnable {
//两个静态的资源
public static Object obj1 = new Object();
public static Object obj2 = new Object();
//标志位
public int flag = 1; //1 or 2
@Override
public void run() {
if(flag == 1) {
synchronized (obj1) {
System.out.println("flag: " + flag + ", 锁住了资源obj1");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("flag: " + flag + ", 等待获取资源obj2");
synchronized (obj2) {
System.out.println("flag: " + flag + ", 获得资源obj2");
}
}
} else if(flag == 2) {
synchronized (obj2) {
System.out.println("flag: " + flag + ", 锁住了资源obj2");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("flag: " + flag + ", 等待获取资源obj1");
synchronized (obj1) {
System.out.println("flag: " + flag + ", 获得资源obj1");
}
}
}
}
}
DeadLock.java
DeadLock.java
/**
* 死锁测试.
* @author michael
*
*/
public class DeadLock {
public static void main(String[] args) {
Program p1 = new Program();
Program p2 = new Program();
p1.flag = 1;
p2.flag = 2;
new Thread(p1).start();
new Thread(p2).start();
}
}
控制台结果:
这里写图片描述
java实现死锁简单例子,Java死锁的简单例子相关推荐
- Java 线程死锁及如何避免死锁介绍
线程死锁 1. 什么是线程死锁 2. 死锁产生的原因 3. 如何避免线程死锁. 1. 什么是线程死锁 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下, ...
- Java多线程学习之路(四)---死锁(DeadLock)
Java多线程学习之路(四)-死锁(DeadLock) 1.定义 死锁就是多个线程在竞争共享资源的时候,相互阻塞,不能脱身的状态(个人理解).其实死锁一定程度上可以看成一个死循环. 举个现实生活中的例 ...
- java 活锁 线程饿死,JAVA并发编程(四)线程死锁、饥饿、活锁
JAVA并发编程(四)线程死锁 线程死锁 什么是线程死锁呢? 为什么会线程死锁呢? 如何避免线程死锁? 什么是饥饿呢? 什么是活锁呢? 线程死锁 什么是线程死锁呢? 死锁是指两个或两个以上的线程在执行 ...
- java线程死锁 cpu 100%_Java死锁排查和Java CPU 100% 排查的步骤整理
工欲善其事,必先利其器 简介 本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多:第二个是java cpu 100%排查,这个 ...
- java 分析java死锁_Java死锁示例–如何分析死锁情况
java 分析java死锁 死锁是两个线程或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,它将导致死锁情况,然后我们将看到如何对其 ...
- Java死锁示例–如何分析死锁情况
死锁是两个或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,该程序将导致死锁情况,然后我们将看到如何对其进行分析. Java死锁示例 ...
- 2. Java并发编程-互斥锁、死锁
上一节讲了引起并发问题原因中的可见性和有序性. 通过利用Java内存模型开发者可以很好的避开上述问题. 本节我们来探索剩下的一个引起并发问题的原因:原子性. 什么是原子性? 即一个或多个操作在CPU执 ...
- java多线程同步与死锁_浅析Java多线程中的同步和死锁
Value Engineering 1基于Java的多线程 多线程是实现并发机制的一种有效手段,它允许编程语言在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立 ...
- java并发编程第十三课 死锁
第67讲:如何写一个必然死锁的例子? 本课时我们会首先介绍什么是死锁,死锁有什么危害和特点,然后通过代码分析一个"必然死锁的例子". 死锁是什么?有什么危害? 什么是死锁 发生在并 ...
- Java 对象锁和类锁 死锁(多线程synchronized关键字)
本文主要是将synchronized关键字用法作为例子来去解释Java中的对象锁 和 类锁. 对于同步,要时刻清醒在 哪个锁对象 上同步,这是关键. 对于同步代码块,要看清楚什么对象已经用于锁定(sy ...
最新文章
- python中str和int区别_Python中的string方法和str方法有什么区别?
- iOS开发tips总结
- php 接口说明文档,phpwind文章中心接口说明
- mysql中删除某一纵的方法_sql数据库:如何在一个表中填加或者删除一个字段!...
- Linux下部署多个Tomcat
- Windows Vista SP1正式版独立安装包
- 转:SQL注入攻击的原理
- 20191207每日一句
- python交通调查数据处理_python数据分析--关于时间类型数据处理的一种方法
- 嵌入式linux 中文输入法,一种用于嵌入式Linux系统的中文拼音输入法的制作方法...
- SAP Open SQL
- 计算机专业期末总结200字,本学期自我总结200字
- dns域名解析原理及过程
- SpringMVC接受参数
- 网络机房搬迁的实施和经验
- win10 条件下在anaconda中安装face_recognition(超简单,亲测有效)
- 湖人VS火箭 continue....
- MySQL(学生表、教师表、课程表、成绩表)多表查询
- 面试题,你觉得产品经理的职责有哪些?
- PhpStorm 注册码