日期:2014-05-20 浏览次数:21039 次
//理解有误区,ConcurrentHashMap发布访问时并不是发布静态内部类HashEntry,反而是封装了HashEntry的非
//静态final内部类KeySet Values EntrySet, 这3个类分别封装了KeyIterator ValueIterator
// EntryIterator
//你可以看一看源代码, HashEntry 其实很简单。ConcurrentHashMap并不会直接发布它 他也不是一个
//实现了Map.Entry接口的类什么的。 因为它只是一个工具类辅助ConcurrentHashMap里的final非静态内部类
//KeyIterator ValueIterator EntryIterator,这几个类才是真正被发布的要访问ConcurrentHashMap的非静
//态属性和方法的的内部类。
//所以得出结论,为了更高的内部聚合,访问最严格性,HashEntry既然是一个工具类不需要访问
//ConcurrentHashMap的一些信息,使它的访问域最小就可以用上静态内不类
/**
* ConcurrentHashMap list entry. Note that this is never exported
* out as a user-visible Map.Entry.
*
* Because the value field is volatile, not final, it is legal wrt
* the Java Memory Model for an unsynchronized reader to see null
* instead of initial value when read via a data race. Although a
* reordering leading to this is not likely to ever actually
* occur, the Segment.readValueUnderLock method is used as a
* backup in case a null (pre-initialized) value is ever seen in
* an unsynchronized access method.
*/
static final class HashEntry<K,V> {
final K key;
final int hash;
volatile V value;
final HashEntry<K,V> next;
HashEntry(K key, int hash, HashEntry<K,V> next, V value) {
this.key = key;
this.hash = hash;
this.next = next;
this.value = value;
}
@SuppressWarnings("unchecked")
static final <K,V> HashEntry<K,V>[] newArray(int i) {
return new HashEntry[i];
}
}
------解决方案--------------------
静态内部类的作用,除了楼主说的“实例化无需外部类实例”以外,还有:静态内部类可以在外部类的静态上下文(如 static 方法、static 块或静态成员定义)中使用。
------解决方案--------------------
除了楼上所说的,还有静态内部类只能访问外部类的静态属性和方法,(封装带来的安全)这是与一般内部类的区别,而且静态内部类还可以有静态数据,静态方法或者又一个静态内部类,这些是非静态内部类所没有的。
------解决方案--------------------
因为静态内部类独立存在,为外部类提供一种处理方法。
ConcurrentHashMap中HashEntry又是多线程共享的,static更合适。
------解决方案--------------------
这个应该结合内部类和静态类一起考虑吧。
静态类的特点就是,所有的属性和方法都是静态的。
------解决方案--------------------
以上说的差不多了!
------解决方案--------------------
下班咯。。为美女顶上一刷子。。。我没有什么说的。。。观望。。。。
------解决方案--------------------
美女程序员!
------解决方案--------------------
如果内部类不会引用到外部类东西的话,强烈建议使用静态内部类,因为这样更节省资源,减少内部类其中的一个指向外部类的引用,详见 effective java
------解决方案--------------------
这个静态内部类,不需要在外部引用,只为当前类提供服务。 封装的完整性。
------解决方案--------------------
写的都很好
------解决方案--------------------
这些内部的东西不是具体涉及到了,过短时间来看还真有点忘记了。 看来要多巩固啊、