pol*_*nts 2 java collections synchronization design-patterns wrapper
java.util.Collections目前提供以下实用方法来synchronized为各种集合接口创建包装器:
synchronizedCollection(Collection<T> c)synchronizedList(List<T> list)synchronizedMap(Map<K,V> m)synchronizedSet(Set<T> s)synchronizedSortedMap(SortedMap<K,V> m)synchronizedSortedSet(SortedSet<T> s)类似地,它也有6个unmodifiedXXX重载。
这里明显遗漏的是 的实用方法NavigableMap<K,V>。确实如此extends SortedMap,但 、 和 也是如此SortedSet extends Set,并且Set extends Collection和都有Collections专用的实用方法。大概是一个有用的抽象,否则它一开始就不会存在,但还没有实用的方法。SortedSetSetNavigableMap
所以问题是:
Collections不提供实用方法NavigableMap?synchronized包装器NavigableMap?
Collections.java似乎表明这只是一个“机械”过程
synchronized像这样添加线程安全功能?这是一个疏忽。Java 8 中添加了修复程序。
乔什写道:
“他们绝对属于那里。他们的缺席是无意的。
我们应该尽快把他们放进去。”我同意,尽管我们没有一个工程师期待编写(和测试)所有这些令人头脑麻木的转发方法。发布日期 : 2006-08-21 00:50:41.0
如果您还没有使用 Java 8,您可能会考虑劫持该java.util包,因为您想扩展static class SynchronizedSortedMap<K, V>声明为私有的包。否则就会有大量的代码复制粘贴。这是一个开始:
package java.util;
import java.util.Collections.SynchronizedSortedMap;
public class NewCollections {
public static <K, V> NavigableMap<K, V> synchronizedNavigableMap(NavigableMap<K, V> m) {
return new SynchronizedNavigableMap<K, V>(m);
}
static class SynchronizedNavigableMap<K, V> extends SynchronizedSortedMap<K, V> implements NavigableMap<K, V> {
private final NavigableMap<K, V> sm;
SynchronizedNavigableMap(NavigableMap<K, V> m) {
super(m);
sm = m;
}
SynchronizedNavigableMap(NavigableMap<K, V> m, Object mutex) {
super(m, mutex);
sm = m;
}
}
}
Run Code Online (Sandbox Code Playgroud)
让 IDE 自动生成 未实现的方法NavigableMap并以与以前相同的方式对其进行编码SynchronizedSortedMap。这是一个例子:
@Override
public K ceilingKey(K key) {
synchronized (mutex) { return sm.ceilingKey(key); }
}
Run Code Online (Sandbox Code Playgroud)
请注意,返回的方法例如您也Set需要将其包装起来。SynchronizedSet再次,请参阅SynchronizedMap和SynchronizedSortedMap来源以获得见解:)
我不认为它是(能够)一个机械过程,因为它涉及很多因素。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |