java中如何写一个死锁例子
来源:互联网 发布:知乎 小知识 编辑:程序博客网 时间:2024/04/29 22:24
如有转载,请申明:
转载至http://blog.csdn.net/qq_35064774/article/details/51793656
你没看错,今天是要写一个死锁程序。通过自己写一个死锁例子,就能理解为什么会发生死锁。
但在写这个程序前,是不是要知道什么情况下才会发生死锁(假装我开头没说过那句话)。我们先抛开一系列复杂的业务逻辑,单纯从语法上来分析。
死锁的定义是,两个或两个以上的线程或进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。
是不是觉得定义比较抽象,我们简化一下,就当成只有两个线程。现在有线程1和线程2。线程1执行过程中,先锁定了对象a,然后需要再锁定b才能继续执行代码;而线程2正巧相反,先锁定了b,需要再锁定a才能继续执行代码。这时,两个线程都等着对方解锁,才能继续执行,这时,两个线程就进入等待状态,最终不会有线程执行。这就变成了死锁。
接下来我们来写代码。
public class TestThread {public static void main(String[] args) {// test dead lockThread t9 = new Thread(new DeadLock(true));Thread t10 = new Thread(new DeadLock(false));t9.start();t10.start();}}class DeadLock implements Runnable{boolean lockFormer;static Object o1 = new Object();static Object o2 = new Object();DeadLock(boolean lockFormer){this.lockFormer = lockFormer;}@Overridepublic void run() {if(this.lockFormer){synchronized (o1) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o2) {System.out.println("1ok");}}}else{synchronized (o2) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o1) {System.out.println("1ok");}}}}}
从这个例子很容体会到,只要尽量避免加多个锁,就可以尽量避免死锁。
1 0
- java中如何写一个死锁例子
- java写的一个死锁例子
- java写一个死锁的简单例子
- 如何写一个死锁的java程序
- 写一个死锁例子,及解决死锁
- 【面试】请写一个java死锁的例子
- java写一个死锁
- java死锁的一个例子
- java自己动手写一个死锁
- java中的线程死锁的一个例子
- java多线程发生死锁的一个例子
- Java一个简单的死锁例子
- Java编写一个简单死锁例子
- java出现死锁的一个例子
- Java产生死锁的一个简单例子
- Java产生死锁的一个简单例子
- Java产生死锁的一个简单例子
- Java产生死锁的一个简单例子
- Oracle中向表中插入数据
- hdu3033 I love sneakers! (分组背包)
- 九度OJ 1034
- Javascript中的基本类型和引用类型
- Codeforces 687C The Values You Can Make(背包)
- java中如何写一个死锁例子
- 模版方法模式对hibernate的封装
- MySQL使用TEXT/BLOB类型的几点注意
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
- 栈与队列-顺序队列与链队列类模板的实现(数据结构基础 第3周)
- 实时应用系统监控平台
- 2016/6/30 校验问题--加班中
- JDK配置
- android 二维码 扫描与生成(内置)