我可以: 邀请好友来看>>
ZOL星空(中国) > 办公星空(中国) > 打印机研究室星空(中国) > 辅助软件星空(中国) > 在Condition中访问AQS方法问题
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

在Condition中访问AQS方法问题

11浏览 / 0回复

jimzh1

jimzh1

0
精华
9
帖子

等  级:Lv.1
经  验:95
  • Z金豆: 0

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:广东
  • 注  册:2014-09-04
  • 登  录:2014-09-04
发表于 2014-09-24 17:42:05
电梯直达 确定
楼主

AQS中有个public 内部类,(没错就是public 内部类,可以观看JAVA基础教程)实现了Condition接口,叫做ConditionObject :

一般,内部类是不允许被定义为public的,这里可以的原因是它的外部类AQS(AbstractQueuedSynchronizer)是抽象类,所以它可以有一个public的内部类。 我用一段demo模拟了这种结构:

可以看到Condition的signal方法可以调用外部抽象类的enq方法,这里编译通过了,是不是觉得很奇妙,为什么一个public的内部类类还可以调用外部抽象类的方法呢?

抽象类是不能被实例化的,那它的成员方法怎么会被调用?



可以看到这里是不能直接new Condition的,Condition明明是public的为什么不能直接new 呢? 这也是我疑问的地方。

仔细琢磨一番后,想起来了, 内部类的实例化只有加上static 修饰符后 才可以不和外部类有任何关系,随意进行实例化,你可以把static 修饰的内部类直接当成一个完全独立的类是去使用。

反之,不管你是不是被public 修饰,只要是内部类,就必须依托于外部类的一个实例去实例化,这里外部类是抽象的,不能直接实例化,那还不简单,这么做:

通过编译了,再运行一下:

用法还是很巧妙的,没错,Condition和AQS就是这么设计和实现的。想学习编程语言教程知识请登录e良师益友网。


高级模式
 30����Զ��������������ָ�������������������
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表
您对“当前页面”满意吗?
满意
不满意
还可以输入