作者 : 卿笃军
原文地址:http://blog.csdn.net/qingdujun/article/details/39367655
本文演示,Tread多线程死锁,简单的分析一下死锁产生的原因,并展示一个死锁的小Demo。
1)死锁产生原因
2)小Demo
一、死锁产生的原因:同步中嵌套同步。
二、一个死锁小Demo:(锁loacka中需要锁lockb,锁lockb中又需要锁locka,然后加上while(true)在里面一顿狂转,直接锁住了。)
package no.zuo.no.die; //1.实现Runnable接口 class Zuosi implements Runnable { private boolean flag; Zuosi(boolean f) { flag = f; } //2.重写run方法 public void run() { if (flag) { while (true) { synchronized (CLock.locka) { System.out.println("if locka"); synchronized (CLock.lockb) { System.out.println("if lockb"); } } } } else { while (true) { synchronized (CLock.lockb) { System.out.println("else lockb"); synchronized (CLock.locka) { System.out.println("else locka"); } } } } } } //里面装2把锁 class CLock { static Object locka = new Object(); static Object lockb = new Object(); } public class CDeadLock { public static void main(String[] args) { //3.创建2线程 Thread t1 = new Thread(new Zuosi(true)); Thread t2 = new Thread(new Zuosi(false)); //4.启动线程 t1.start(); t2.start(); } }
运行显示结果(卡死了吧?锁住了!!!):
参考文献: Java视频 毕向东 主讲
原文地址:http://blog.csdn.net/qingdujun/article/details/39367655
时间: 2024-10-12 18:08:18