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
and Set extends Collection
和and
确实Collections
有专用于SortedSet
and的实用程序方法Set
。大概NavigableMap
是一个有用的抽象,否则它本来就不会存在的,但是还没有实用的方法。
所以问题是:
这是一个疏忽。该修复程序正在进行中。
乔希写道:
“他们绝对属于那里。他们的缺席是无意的。
我们应该尽快将它们放进去。”我同意,即使我们当中没有一个工程师期望编写(和测试)所有这些令人麻木的转发方法。发表日期:2006-08-21 00:50:41.0
不过要花一点时间。
更新 :关于手动实现它,您可以考虑劫持该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;
}
}
}
让IDE自动生成未实现的方法,NavigableMap
并以相同的方式对它们进行编码SynchronizedSortedMap
。这是一个示例:
@Override
public K ceilingKey(K key) {
synchronized (mutex) { return sm.ceilingKey(key); }
}
请注意,例如返回的方法也Set
需要将其包装SynchronizedSet
。再次,请参阅SynchronizedMap
和SynchronizedSortedMap
参考资料以获取见解:)
我不希望它是机械过程,因为它涉及很多因素。
我是java新手。我有点混淆了线程安全和同步。线程安全意味着一个方法或类实例可以被多个线程同时使用,而不会出现任何问题。其中同步意味着一次只能有一个线程运行。 那么它们是如何相互关联的呢?
问题内容: 我正在学习使用HikariCP(我是Java的新手),我找到了一个包装器,但我认为这不是线程安全性,那么单例的实例是线程安全性,而不是方法getConnection()。该类是这样的: 好吧,我需要将参数发送到HikariConfig或HikariDataSource,所以我以这种方式重新编写了它: 我用这种方式: 但是我没有Java方面的经验,所以我需要您的建议。一流(原始)线程安全
最近我在读一些关于java并发的书。关于线程安全,如果不可能使一个类变为inmutable,那么可以通过同步它的数据来确保线程安全。 下面的类显然不是线程安全的 然后我可以同步写,但它不会保持线程安全 因为我不仅需要同步写入,还需要同步读取 现在的问题是,通过使用易失性,我可以保证其他线程会看到更新的值,所以这让我认为这个类应该是线程安全的 最后一个类线程安全吗??
我要创建一个程序,给定N个线程,这些线程可以在队列中插入或删除一个元素,但是线程访问队列是有条件的: null 我用同步块做的,就像这样: run void很简单,它只是在插入或删除元素时永远循环。 我的问题是,在不使用synchronized的情况下,我如何遵循那个条件? 没有同步块,怎么可能保证互斥呢? 编辑:我不能使用类似于同步的东西(就像锁一样)
问题内容: MyDialog类只有很少的组合和文本字段,并且正在用DB值填充组合。在选择一个组合值时,我从数据库获取了另一个值以填充下一个组合。 上面的程序以相同的方式运行,而不使用invokeLater线程。什么时候invokeLater在Swing编程中变得有用。我已经读过一些,但似乎都是理论上的。invokeLater对应用程序有什么区别?仅在main方法内部使用它就足够了还是应该在操作侦听
我已经编写了一个Java应用程序,并且我已经创建了一个可执行的Jar文件,该文件使用成功运行我的应用程序。我有一个名为的可执行外壳脚本,它包装了这个Jar的启动(并提供了各种标志,如--help等)。我的目标输出目录如下所示: 我为仅Unix应用程序编写安装程序的标准方法是什么?我假设我将launchMyProgram可执行文件放在/usr/local/bin中是正确的。但是我应该把Jar文件放在