java.util.concurrent.ConcurrentSkipListSet的替代品
问题描述:
我正在寻找将一些使用java.util.concurrent.ConcurrentSkipListSet的代码移植到此类不可用的环境(特别是android 2.2)。因此,我正在寻找替代品。我的要求是:java.util.concurrent.ConcurrentSkipListSet的替代品
- 基本的“设置”执行(不需要NavigableSet或类似)
- 标准操作必须是线程安全的(我没有很高的呼叫量,所以锁定是可以接受的)
- 迭代器不能抛出ConcurrentModificationException
- 迭代器必须支持remove()操作
任何想法?
答
有a backport of java.util.concurrent for JDK 1.3 and above。它包括ConcurrentSkipListSet。试试看。您可能需要JDK 5的版本。
+0
有用。如果我在实施自己的解决方案之前看到它(根据原始问题的评论),我现在就会使用它! – Jules 2012-03-22 12:11:32
答
使用一个HashSet:
Set s = Collections.synchronizedSet(new HashSet(...));
同步S上,这应该是你没有被使用迭代remove()操作修改以任何方式设定比其他只要工作。
您是否尝试过复制ConcurrentSkipListSet的源代码并查看它是否适用于Android 2.2?你有在那里工作的JDK5基础的concurreny类,对吗? – Thilo 2012-03-22 05:33:08
这可能是可行的,但很可能是一些工作,因为ConcurrentSkipListSet似乎使用其他java.util.concurrent类的包私有方法。我不知道我最终会复制多少课。我希望有可以做这项工作的替代实现,但如果没有,我想这是最好的前进方向。 – Jules 2012-03-22 07:08:19
虽然查看ConcurrentSkipListSet的源代码让我想起了之前我注意到的一些东西:HashSet的源代码(http://kickjava.com/src/java/util/HashSet.java.htm)非常简单,并且使用HashMap执行其所有工作。我想知道是否复制这个代替ConcurrentHashMap会做我想要的? – Jules 2012-03-22 08:03:29