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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭利超 高级黑马   /  2013-4-5 22:38  /  899 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭利超 于 2013-4-6 09:43 编辑
  1. /*
  2. 死锁。
  3. 同步中嵌套同步。

  4. */

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


  38. class  DeadLockDemo
  39. {
  40.         public static void main(String[] args)
  41.         {

  42.                 Ticket t = new Ticket();

  43.                 Thread t1 = new Thread(t);
  44.                 Thread t2 = new Thread(t);
  45.                 t1.start();
  46.                 try{Thread.sleep(10);}catch(Exception e){}
  47.                 t.flag = false;
  48.                 t2.start();


  49.         }
  50. }

复制代码
上面代码中 主函数中 创建了 Ticket的对象   但是他用t.flag=false  改变了flag的值   boolean flag = true;   这应该是布尔型变量吧  为什么可以直接t.false改变值呢

1 个回复

倒序浏览
这个是肯定可以的。首先 主函数中 创建了 Ticket的对象,就可以使用对象.字段或者是对象.方法的。flag定义的是布尔型的变量,但是没有在这个变量前面添加任何的权限修饰词啊,也就是说这个布尔型的变量默认的是public,所以可以通过对象.字段来改变的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马