死锁:同步中嵌套同步
进程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();
- }
- }
复制代码 |
|