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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹兆国 中级黑马   /  2014-6-13 22:17  /  914 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima.day11;

  2. /*
  3. 死锁。
  4. 同步中嵌套同步。

  5. 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

  6. 导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问。“synchronized”关键词的作用是,
  7. 确保在某个时刻只有一个线程被允许执行特定的代码块,因此,
  8. 被允许执行的线程首先必须拥有对变量或对象的排他性的访问权。
  9. 当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。

  10. */

  11. class Ticket implements Runnable
  12. {
  13.         private  int tick = 1000;
  14.         Object obj = new Object();
  15.         boolean flag = true;
  16.         public  void run()
  17.         {
  18.                 if(flag)
  19.                 {
  20.                         while(true)
  21.                         {
  22.                                 synchronized(obj)
  23.                                 {
  24.                                         show();
  25.                                 }
  26.                         }
  27.                 }
  28.                 else
  29.                         while(true)
  30.                                 show();
  31.         }
  32.         public synchronized void show()//this
  33.         {
  34.                 synchronized(obj)
  35.                 {
  36.                         if(tick>0)
  37.                         {
  38.                                 try{Thread.sleep(10);}catch(Exception e){}
  39.                                 System.out.println(Thread.currentThread().getName()+"....code : "+ tick--);
  40.                         }
  41.                 }
  42.         }
  43. }


  44. class  DeadLockDemo
  45. {
  46.         public static void main(String[] args)
  47.         {

  48.                 Ticket t = new Ticket();

  49.                 Thread t1 = new Thread(t);
  50.                 Thread t2 = new Thread(t);
  51.                 t1.start();
  52.                 try{Thread.sleep(10);}catch(Exception e){}
  53.                 t.flag = false;
  54.                 t2.start();


  55.         }
  56. }
复制代码
Thread-0....code : 980
Thread-0....code : 979
Thread-0....code : 978
Thread-0....code : 977
Thread-0....code : 976
Thread-0....code : 975
Thread-0....code : 974
Thread-0....code : 973
Thread-0....code : 972
Thread-0....code : 971
Thread-0....code : 970
Thread-0....code : 969
Thread-0....code : 968
Thread-0....code : 967
Thread-0....code : 966
Thread-0....code : 965
Thread-0....code : 964
Thread-0....code : 963
Thread-0....code : 962
Thread-0....code : 961
Thread-0....code : 960
Thread-0....code : 959
Thread-0....code : 958
Thread-0....code : 957
Thread-0....code : 956
Thread-0....code : 955
Thread-0....code : 954
Thread-0....code : 953
Thread-0....code : 952
Thread-0....code : 951
Thread-0....code : 950
Thread-0....code : 949
Thread-0....code : 948
Thread-0....code : 947
Thread-0....code : 946
Thread-0....code : 945
Thread-0....code : 944
Thread-0....code : 943
Thread-0....code : 942
Thread-0....code : 941
Thread-0....code : 940
Thread-1....code : 939
Thread-1....code : 938
Thread-1....code : 937
Thread-1....code : 936
Thread-1....code : 935
Thread-1....code : 934
Thread-1....code : 933
Thread-1....code : 932
Thread-1....code : 931
Thread-1....code : 930
Thread-1....code : 929
Thread-1....code : 928
Thread-1....code : 927
Thread-1....code : 926
Thread-1....code : 925
Thread-1....code : 924
Thread-1....code : 923
Thread-1....code : 922
Thread-1....code : 921
Thread-1....code : 920
Thread-1....code : 919
Thread-1....code : 918
Thread-1....code : 917
Thread-1....code : 916
Thread-1....code : 915
Thread-1....code : 914
在这里阻塞了,为什么


0 个回复

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