黑马程序员———死锁

死锁:同步中嵌套同步
进程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锁,当两个线程运行时,就可能会出现死锁导致
,有关死锁代码是毕老师交代必须会自己写的代码
  1. package com.itheima;

  2. class Deadlock  implements Runnable
  3. {
  4.         private boolean flag ;
  5.         
  6.         Deadlock(boolean flag)
  7.         {
  8.                 this.flag = flag;
  9.         }
  10.         
  11.         @Override
  12.         public void run()
  13.         {
  14.                 if(flag)
  15.                 {
  16.                         while(true)
  17.                         {
  18.                                 synchronized (DeadlockT.locka)
  19.                                 {
  20.                                         System.out.println("if locha");
  21.                                         synchronized (DeadlockT.lockb)
  22.                                         {
  23.                                                 System.out.println("if lockb");
  24.                                         }                                        
  25.                                 }                                
  26.                         }
  27.                         
  28.                 }else
  29.                 {
  30.                         while(true)
  31.                         {
  32.                                 synchronized (DeadlockT.lockb)
  33.                                 {
  34.                                         System.out.println("else lockb");
  35.                                         synchronized (DeadlockT.locka)
  36.                                         {
  37.                                                 System.out.println("else locka");
  38.                                         }
  39.                                         
  40.                                 }
  41.                         }
  42.                                                         
  43.                 }                                
  44.         }        
  45. }

  46. class DeadlockT
  47. {
  48.         static Object locka = new Object();
  49.         static Object lockb = new Object();
  50. }

  51. class DeadlockTest
  52. {
  53.         public static void main(String[] args)
  54.         {
  55.                 Thread t1 = new Thread(new Deadlock(true));
  56.                 Thread t2 = new Thread(new Deadlock(false));
  57.                 t1.start();
  58.                 t2.start();
  59.         }        
  60. }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值