死锁:同步中嵌套同步
进程A占有资源R1,等待进程B占有的资源Rr;进程B占有资源Rr,等待进程A占有的资源R1。而且资源R1和Rr只允许一个进程占用,即:不允许两个进程同时占用。结果,两个进程都不能继续执行,若不采取其它措施,这种循环等待状况会无限期持续下去,就发生了进程死锁。
简单点说:有A和B两个线程,有CD 两把锁, A和B嵌套CD锁,A线程中有C,D锁,B线程中有D C两把锁,而且AB两线程不能同时获得C或D锁,当两个线程运行时,就可能会出现死锁导致
,有关死锁代码是毕老师交代必须会自己写的代码
复制代码
进程A占有资源R1,等待进程B占有的资源Rr;进程B占有资源Rr,等待进程A占有的资源R1。而且资源R1和Rr只允许一个进程占用,即:不允许两个进程同时占用。结果,两个进程都不能继续执行,若不采取其它措施,这种循环等待状况会无限期持续下去,就发生了进程死锁。
简单点说:有A和B两个线程,有CD 两把锁, A和B嵌套CD锁,A线程中有C,D锁,B线程中有D C两把锁,而且AB两线程不能同时获得C或D锁,当两个线程运行时,就可能会出现死锁导致
,有关死锁代码是毕老师交代必须会自己写的代码
-
package com.itheima;
-
-
class Deadlock implements Runnable
-
{
-
private boolean flag ;
-
-
Deadlock(boolean flag)
-
{
-
this.flag = flag;
-
}
-
-
@Override
-
public void run()
-
{
-
if(flag)
-
{
-
while(true)
-
{
-
synchronized (DeadlockT.locka)
-
{
-
System.out.println("if locha");
-
synchronized (DeadlockT.lockb)
-
{
-
System.out.println("if lockb");
-
}
-
}
-
}
-
-
}else
-
{
-
while(true)
-
{
-
synchronized (DeadlockT.lockb)
-
{
-
System.out.println("else lockb");
-
synchronized (DeadlockT.locka)
-
{
-
System.out.println("else locka");
-
}
-
-
}
-
}
-
-
}
-
}
-
}
-
-
class DeadlockT
-
{
-
static Object locka = new Object();
-
static Object lockb = new Object();
-
}
-
-
class DeadlockTest
-
{
-
public static void main(String[] args)
-
{
-
Thread t1 = new Thread(new Deadlock(true));
-
Thread t2 = new Thread(new Deadlock(false));
-
t1.start();
-
t2.start();
-
}
- }