黑马程序员技术交流社区

标题: 关于多线程中死锁的问题。 [打印本页]

作者: 郭旭辉    时间: 2014-8-20 15:56
标题: 关于多线程中死锁的问题。
  1. package cn.itcast.thread;
  2. /*
  3. * 死锁的案例
  4. */

  5. class Dead implements Runnable{
  6.         private boolean flag;
  7.         Dead(boolean flag){this.flag = flag;}
  8.         public void run(){
  9.                 while(true){
  10.                         //如果flag = true线程进入A同步代码块,进B同步代码块
  11.                         if(flag){
  12.                                 synchronized(LockA.locka){
  13.                                         System.out.println("if..locka");
  14.                                         //进B同步代码块
  15.                                         synchronized(LockB.lockb){
  16.                                                 System.out.println("if..lockb");
  17.                                         }
  18.                                 }
  19.                         }else{
  20.                                 //如果flag = false 线程进入B同步代码块,进入A同步代码块
  21.                                 synchronized(LockB.lockb){
  22.                                         System.out.println("else..lockb");
  23.                                         //进A同步代码块
  24.                                         synchronized(LockA.locka){
  25.                                                 System.out.println("else..locka");
  26.                                         }
  27.                                 }
  28.                         }
  29.                 }
  30.         }
  31. }

  32. public class ThreadDemo5 {
  33.         public static void main(String[] args) {
  34.                 Dead d1 = new Dead(true);//线程进入A代码块
  35.                 Dead d2 = new Dead(false);//线程进入B代码块
  36.                 Thread t1 = new Thread(d1);
  37.                 Thread t2 = new Thread(d2);
  38.                 t1.start();
  39.                 t2.start();
  40.         }
  41. }
  42. //定义两个锁,A锁,B锁,唯一对象
  43. class LockA{
  44.         public static final LockA locka = new LockA();
  45. }
  46. class LockB{
  47.         public static final LockB lockb = new LockB();
  48. }
复制代码
.死锁
  多线程在争抢同一把锁的时候,造成的程序的假死现象。实际的开发中不可能出现,但是面试的时候很大的概率会遇到这样的问题。而且需要手写代码出来。给大家分享下关于死锁的代码。希望能够让大家有个印象。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2