implement ConcurrentHashMap and AtomicReferenceArray

This is the simplest possible ConcurrentHashMap I could come up with
that works and is actually concurrent in the way one would expect.
It's pretty unconventional, being based on a persistent red-black
tree, and not particularly memory-efficient or cache-friendly.  I
think this is a good place to start, though, and it should perform
reasonably well for most workloads.  Patches for a more efficient
implementation are welcome!

I also implemented AtomicReferenceArray, since I was using it in my
first, naive attempt to implement ConcurrentHashMap.

I had to do a bit of refactoring, including moving some non-standard
stuff from java.util.Collections to avian.Data so I could make it
available to code outside the java.util package, which is why I had to
modify several unrelated files.
This commit is contained in:
Joel Dice
2014-03-07 09:08:19 -07:00
parent b6c3bc6f4d
commit c0d178d5f1
19 changed files with 1074 additions and 284 deletions

View File

@ -131,7 +131,7 @@ public class LinkedHashMap<K, V> extends HashMap<K, V> {
}
public <T> T[] toArray(T[] array) {
return Collections.toArray(this, array);
return avian.Data.toArray(this, array);
}
public void clear() {
@ -169,7 +169,7 @@ public class LinkedHashMap<K, V> extends HashMap<K, V> {
}
public <T> T[] toArray(T[] array) {
return Collections.toArray(this, array);
return avian.Data.toArray(this, array);
}
public void clear() {
@ -177,7 +177,7 @@ public class LinkedHashMap<K, V> extends HashMap<K, V> {
}
public Iterator<K> iterator() {
return new Collections.KeyIterator(new MyIterator());
return new avian.Data.KeyIterator(new MyIterator());
}
}
@ -230,7 +230,7 @@ public class LinkedHashMap<K, V> extends HashMap<K, V> {
}
public <T> T[] toArray(T[] array) {
return Collections.toArray(this, array);
return avian.Data.toArray(this, array);
}
public void clear() {
@ -238,7 +238,7 @@ public class LinkedHashMap<K, V> extends HashMap<K, V> {
}
public Iterator<V> iterator() {
return new Collections.ValueIterator(new MyIterator());
return new avian.Data.ValueIterator(new MyIterator());
}
}