2012-03-22 19 views
1

我正在尋找將一些使用java.util.concurrent.ConcurrentSkipListSet的代碼移植到此類不可用的環境(特別是android 2.2)。因此,我正在尋找替代品。我的要求是:java.util.concurrent.ConcurrentSkipListSet的替代品

  • 基本的「設置」執行(不需要NavigableSet或類似)
  • 標準操作必須是線程安全的(我沒有很高的呼叫量,所以鎖定是可以接受的)
  • 迭代器不能拋出ConcurrentModificationException
  • 迭代器必須支持remove()操作

任何想法?

+0

您是否嘗試過複製ConcurrentSkipListSet的源代碼並查看它是否適用於Android 2.2?你有在那裏工作的JDK5基礎的concurreny類,對嗎? – Thilo 2012-03-22 05:33:08

+0

這可能是可行的,但很可能是一些工作,因爲ConcurrentSkipListSet似乎使用其他java.util.concurrent類的包私有方法。我不知道我最終會複製多少課。我希望有可以做這項工作的替代實現,但如果沒有,我想這是最好的前進方向。 – Jules 2012-03-22 07:08:19

+0

雖然查看ConcurrentSkipListSet的源代碼讓我想起了之前我注意到的一些東西:HashSet的源代碼(http://kickjava.com/src/java/util/HashSet.java.htm)非常簡單,並且使用HashMap執行其所有工作。我想知道是否複製這個代替ConcurrentHashMap會做我想要的? – Jules 2012-03-22 08:03:29

回答

-1

使用一個HashSet:

Set s = Collections.synchronizedSet(new HashSet(...)); 

同步S上,這應該是你沒有被使用迭代remove()操作修改以任何方式設定比其他只要工作。

Collections.synchronizedSet

+0

這不會工作,因爲我有一個線程迭代集合的內容,而另一個同時添加項目。 – Jules 2012-03-22 06:51:19

+0

但你說鎖定是可以接受的! :p j/k。我認爲你可以嘗試Thilo的建議。 – Drew 2012-03-22 07:01:32