A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭旭辉 中级黑马   /  2014-8-20 15:56  /  877 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
.死锁
  多线程在争抢同一把锁的时候,造成的程序的假死现象。实际的开发中不可能出现,但是面试的时候很大的概率会遇到这样的问题。而且需要手写代码出来。给大家分享下关于死锁的代码。希望能够让大家有个印象。



评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马