本文演示,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();
}
}
运行显示结果(卡死了吧?锁住了!!!):