我的jdk版本是1.6,我找到了这样的AbstractQueuedSynchronizer的描述:
子类应定义为非公共内部帮助器类,用于实现其封闭类的同步属性。
使用内部课程有什么好处?
答案 0 :(得分:1)
AbstractQueuedSynchronizer
提供了大量public
方法,并且所有这些方法都不太可能作为您自己的public
API的一部分。公开这些不需要的方法会分散您的实际API,甚至会损害代码的稳定性。更糟糕的是,这个类的API可能会发展,提供更多的方法,你无法事先知道它们是否适合你的用例。
请注意,java.util.concurrent
包的许多并发工具在内部使用此类,而不公开所有AQS方法。
此外,在内部使用AbstractQueuedSynchronizer
可让您切换到另一个类,例如Java 6引入了AbstractQueuedLongSynchronizer
,而在Java 5中只有AbstractQueuedSynchronizer
,java.util.concurrent
的某些类可能已经切换,从那时起你没有注意到。
答案 1 :(得分:0)
AbstractQueuedSynchronizer是一个为FIFO类结构提供阻塞机制的框架。您可以看到许多阻止结构扩展此类的功能以实现锁定机制。
例如,您可以看到ReentrantLock类通过扩展AQS的Sync类提供公平/不公平的锁定。关于内部课程,这是一个组合的案例。内部类仅存在以帮助其父类。
我希望它有所帮助。
答案 2 :(得分:0)
这是因为否则你将不得不从AbstractQueuedSynchronizer扩展你自己的类,你不会这样做,因为它会给你自己的类层次结构带来不必要的依赖。
答案 3 :(得分:0)
谢谢大家!综合你的答案,也许问题的原因是:
通常子类只是由它的外部类使用,所以不需要在jdk中定义普通类
我们可以使用组合而不是扩展。同时,我们可以避免暴露那些不需要的方法