|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。在今天的文章中,我提到“它能够会见AbstractQueuedSynchronizer中的办法和其他外部类(AbstractQueuedSynchronizer是个笼统类,至于他怎样能会见,这里有个很奇奥的点,前面我专门用demo申明)”
如今专门来讲下这个成绩。
AQS中有个public外部类,(没错就是public外部类)完成了Condition接口,叫做ConditionObject:
一样平常,外部类是不同意被界说为public的,这里能够的缘故原由是它的内部类AQS(AbstractQueuedSynchronizer)是笼统类,以是它能够有一个public的外部类。我用一段demo摹拟了这类布局:
能够看到Condition的signal办法能够挪用内部笼统类的enq办法,这里编译经由过程了,是否是以为很奇奥,为何一个public的外部类类还能够挪用内部笼统类的办法呢?
笼统类是不克不及被实例化的,那它的成员办法怎样会被挪用?
因而我写了个demo:
能够看到这里是不克不及间接newCondition的,Condition明显是public的为何不克不及间接new呢?这也是我疑问的中央。
细心揣摩一番后,想起来了,外部类的实例化只要加上static润色符后才能够反面内部类有任何干系,随便举行实例化,你能够把static润色的外部类间接当做一个完整自力的类是往利用。
反之,不论你是否是被public润色,只需是外部类,就必需依托于内部类的一个实例往实例化,这里内部类是笼统的,不克不及间接实例化,那还不复杂,这么做:
经由过程编译了,再运转一下:
用法仍是很奇妙的,没错,Condition和AQS就是这么计划和完成的。
但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是net网页编程beans,谢谢。 |
|