From 87062ca29f0c1d83f2df1e69c27c77ceb80fbb79 Mon Sep 17 00:00:00 2001
From: Doug Lea
Date: Mon, 12 Dec 2011 10:45:54 +0000
Subject: [PATCH] 7118066: Warnings in java.util.concurrent package
Reviewed-by: chegar, dholmes
---
.../util/concurrent/ArrayBlockingQueue.java | 14 +-
.../util/concurrent/ConcurrentHashMap.java | 45 ++++---
.../concurrent/ConcurrentLinkedDeque.java | 4 +-
.../concurrent/ConcurrentLinkedQueue.java | 4 +-
.../concurrent/ConcurrentSkipListMap.java | 126 +++++++++---------
.../concurrent/ConcurrentSkipListSet.java | 19 ++-
.../util/concurrent/CopyOnWriteArrayList.java | 11 +-
.../java/util/concurrent/DelayQueue.java | 2 +-
.../java/util/concurrent/Exchanger.java | 20 +--
.../java/util/concurrent/ForkJoinPool.java | 4 +-
.../java/util/concurrent/ForkJoinTask.java | 2 +-
.../util/concurrent/ForkJoinWorkerThread.java | 8 +-
.../util/concurrent/LinkedTransferQueue.java | 30 ++---
.../classes/java/util/concurrent/Phaser.java | 2 +-
.../concurrent/PriorityBlockingQueue.java | 5 +-
.../ScheduledThreadPoolExecutor.java | 88 ++++++------
.../util/concurrent/SynchronousQueue.java | 73 +++++-----
.../java/util/Collections/EmptyIterator.java | 2 -
18 files changed, 242 insertions(+), 217 deletions(-)
diff --git a/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java b/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java
index 32fd50470d6..74f1e985523 100644
--- a/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java
+++ b/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java
@@ -131,8 +131,9 @@ public class ArrayBlockingQueue extends AbstractQueue
/**
* Returns item at index i.
*/
+ @SuppressWarnings("unchecked")
final E itemAt(int i) {
- return this.cast(items[i]);
+ return (E) items[i];
}
/**
@@ -162,7 +163,8 @@ public class ArrayBlockingQueue extends AbstractQueue
*/
private E extract() {
final Object[] items = this.items;
- E x = this.cast(items[takeIndex]);
+ @SuppressWarnings("unchecked")
+ E x = (E) items[takeIndex];
items[takeIndex] = null;
takeIndex = inc(takeIndex);
--count;
@@ -647,7 +649,9 @@ public class ArrayBlockingQueue extends AbstractQueue
int n = 0;
int max = count;
while (n < max) {
- c.add(this.cast(items[i]));
+ @SuppressWarnings("unchecked")
+ E x = (E) items[i];
+ c.add(x);
items[i] = null;
i = inc(i);
++n;
@@ -684,7 +688,9 @@ public class ArrayBlockingQueue extends AbstractQueue
int n = 0;
int max = (maxElements < count) ? maxElements : count;
while (n < max) {
- c.add(this.cast(items[i]));
+ @SuppressWarnings("unchecked")
+ E x = (E) items[i];
+ c.add(x);
items[i] = null;
i = inc(i);
++n;
diff --git a/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java b/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
index e82148069b4..48b00212ed2 100644
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
@@ -37,9 +37,6 @@ package java.util.concurrent;
import java.util.concurrent.locks.*;
import java.util.*;
import java.io.Serializable;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
/**
* A hash table supporting full concurrency of retrievals and
@@ -228,7 +225,7 @@ public class ConcurrentHashMap extends AbstractMap
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = HashEntry.class;
+ Class> k = HashEntry.class;
nextOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("next"));
} catch (Exception e) {
@@ -433,7 +430,7 @@ public class ConcurrentHashMap extends AbstractMap
int newCapacity = oldCapacity << 1;
threshold = (int)(newCapacity * loadFactor);
HashEntry[] newTable =
- (HashEntry[]) new HashEntry[newCapacity];
+ (HashEntry[]) new HashEntry,?>[newCapacity];
int sizeMask = newCapacity - 1;
for (int i = 0; i < oldCapacity ; i++) {
HashEntry e = oldTable[i];
@@ -677,7 +674,7 @@ public class ConcurrentHashMap extends AbstractMap
int cap = proto.table.length;
float lf = proto.loadFactor;
int threshold = (int)(cap * lf);
- HashEntry[] tab = (HashEntry[])new HashEntry[cap];
+ HashEntry[] tab = (HashEntry[])new HashEntry,?>[cap];
if ((seg = (Segment)UNSAFE.getObjectVolatile(ss, u))
== null) { // recheck
Segment s = new Segment(lf, threshold, tab);
@@ -694,7 +691,7 @@ public class ConcurrentHashMap extends AbstractMap
// Hash-based segment and entry accesses
/**
- * Get the segment for the given hash
+ * Gets the segment for the given hash code.
*/
@SuppressWarnings("unchecked")
private Segment segmentForHash(int h) {
@@ -703,7 +700,7 @@ public class ConcurrentHashMap extends AbstractMap
}
/**
- * Gets the table entry for the given segment and hash
+ * Gets the table entry for the given segment and hash code.
*/
@SuppressWarnings("unchecked")
static final HashEntry entryForHash(Segment seg, int h) {
@@ -758,8 +755,8 @@ public class ConcurrentHashMap extends AbstractMap
// create segments and segments[0]
Segment s0 =
new Segment(loadFactor, (int)(cap * loadFactor),
- (HashEntry[])new HashEntry[cap]);
- Segment[] ss = (Segment[])new Segment[ssize];
+ (HashEntry[])new HashEntry,?>[cap]);
+ Segment[] ss = (Segment[])new Segment,?>[ssize];
UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0]
this.segments = ss;
}
@@ -916,6 +913,7 @@ public class ConcurrentHashMap extends AbstractMap
*
* @throws NullPointerException if the specified key is null
*/
+ @SuppressWarnings("unchecked")
public V get(Object key) {
Segment s; // manually integrate access methods to reduce overhead
HashEntry[] tab;
@@ -1026,7 +1024,7 @@ public class ConcurrentHashMap extends AbstractMap
* full compatibility with class {@link java.util.Hashtable},
* which supported this method prior to introduction of the
* Java Collections framework.
-
+ *
* @param value a value to search for
* @return true if and only if some key maps to the
* value argument in this table as
@@ -1262,7 +1260,7 @@ public class ConcurrentHashMap extends AbstractMap
}
/**
- * Set nextEntry to first node of next non-empty table
+ * Sets nextEntry to first node of next non-empty table
* (in backwards order, to simplify checks).
*/
final void advance() {
@@ -1326,12 +1324,14 @@ public class ConcurrentHashMap extends AbstractMap
final class WriteThroughEntry
extends AbstractMap.SimpleEntry
{
+ static final long serialVersionUID = 7249069246763182397L;
+
WriteThroughEntry(K k, V v) {
super(k,v);
}
/**
- * Set our entry's value and write through to the map. The
+ * Sets our entry's value and writes through to the map. The
* value to return is somewhat arbitrary here. Since a
* WriteThroughEntry does not necessarily track asynchronous
* changes, the most recent "previous" value could be
@@ -1427,15 +1427,16 @@ public class ConcurrentHashMap extends AbstractMap
/* ---------------- Serialization Support -------------- */
/**
- * Save the state of the ConcurrentHashMap instance to a
- * stream (i.e., serialize it).
+ * Saves the state of the ConcurrentHashMap instance to a
+ * stream (i.e., serializes it).
* @param s the stream
* @serialData
* the key (Object) and value (Object)
* for each key-value mapping, followed by a null pair.
* The key-value mappings are emitted in no particular order.
*/
- private void writeObject(java.io.ObjectOutputStream s) throws IOException {
+ private void writeObject(java.io.ObjectOutputStream s)
+ throws java.io.IOException {
// force all segments for serialization compatibility
for (int k = 0; k < segments.length; ++k)
ensureSegment(k);
@@ -1463,13 +1464,13 @@ public class ConcurrentHashMap extends AbstractMap
}
/**
- * Reconstitute the ConcurrentHashMap instance from a
- * stream (i.e., deserialize it).
+ * Reconstitutes the ConcurrentHashMap instance from a
+ * stream (i.e., deserializes it).
* @param s the stream
*/
@SuppressWarnings("unchecked")
private void readObject(java.io.ObjectInputStream s)
- throws IOException, ClassNotFoundException {
+ throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
// Re-initialize segments to be minimally sized, and let grow.
@@ -1479,7 +1480,7 @@ public class ConcurrentHashMap extends AbstractMap
Segment seg = segments[k];
if (seg != null) {
seg.threshold = (int)(cap * seg.loadFactor);
- seg.table = (HashEntry[]) new HashEntry[cap];
+ seg.table = (HashEntry[]) new HashEntry,?>[cap];
}
}
@@ -1504,8 +1505,8 @@ public class ConcurrentHashMap extends AbstractMap
int ss, ts;
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class tc = HashEntry[].class;
- Class sc = Segment[].class;
+ Class> tc = HashEntry[].class;
+ Class> sc = Segment[].class;
TBASE = UNSAFE.arrayBaseOffset(tc);
SBASE = UNSAFE.arrayBaseOffset(sc);
ts = UNSAFE.arrayIndexScale(tc);
diff --git a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java
index 21d59cfc460..c26e371f9d1 100644
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java
@@ -335,7 +335,7 @@ public class ConcurrentLinkedDeque
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = Node.class;
+ Class> k = Node.class;
prevOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("prev"));
itemOffset = UNSAFE.objectFieldOffset
@@ -1457,7 +1457,7 @@ public class ConcurrentLinkedDeque
NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = ConcurrentLinkedDeque.class;
+ Class> k = ConcurrentLinkedDeque.class;
headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset
diff --git a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java
index fcdfcf97eb6..dfac05c6d40 100644
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java
@@ -208,7 +208,7 @@ public class ConcurrentLinkedQueue extends AbstractQueue
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = Node.class;
+ Class> k = Node.class;
itemOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("item"));
nextOffset = UNSAFE.objectFieldOffset
@@ -823,7 +823,7 @@ public class ConcurrentLinkedQueue extends AbstractQueue
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = ConcurrentLinkedQueue.class;
+ Class> k = ConcurrentLinkedQueue.class;
headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset
diff --git a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java
index 8d23964512b..fdf83d1cc81 100644
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java
@@ -35,7 +35,6 @@
package java.util.concurrent;
import java.util.*;
-import java.util.concurrent.atomic.*;
/**
* A scalable concurrent {@link ConcurrentNavigableMap} implementation.
@@ -90,6 +89,7 @@ import java.util.concurrent.atomic.*;
* @param the type of mapped values
* @since 1.6
*/
+@SuppressWarnings("unchecked")
public class ConcurrentSkipListMap extends AbstractMap
implements ConcurrentNavigableMap,
Cloneable,
@@ -352,11 +352,11 @@ public class ConcurrentSkipListMap extends AbstractMap
private transient int randomSeed;
/** Lazily initialized key set */
- private transient KeySet keySet;
+ private transient KeySet keySet;
/** Lazily initialized entry set */
- private transient EntrySet entrySet;
+ private transient EntrySet entrySet;
/** Lazily initialized values collection */
- private transient Values values;
+ private transient Values values;
/** Lazily initialized descending key set */
private transient ConcurrentNavigableMap descendingMap;
@@ -517,7 +517,7 @@ public class ConcurrentSkipListMap extends AbstractMap
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = Node.class;
+ Class> k = Node.class;
valueOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("value"));
nextOffset = UNSAFE.objectFieldOffset
@@ -597,7 +597,7 @@ public class ConcurrentSkipListMap extends AbstractMap
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
- Class k = Index.class;
+ Class> k = Index.class;
rightOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("right"));
} catch (Exception e) {
@@ -933,7 +933,7 @@ public class ConcurrentSkipListMap extends AbstractMap
* direction.
*/
level = max + 1;
- Index[] idxs = (Index[])new Index[level+1];
+ Index[] idxs = (Index[])new Index,?>[level+1];
Index idx = null;
for (int i = 1; i <= level; ++i)
idxs[i] = idx = new Index(z, idx, null);
@@ -1436,16 +1436,16 @@ public class ConcurrentSkipListMap extends AbstractMap
* @return a shallow copy of this map
*/
public ConcurrentSkipListMap clone() {
- ConcurrentSkipListMap clone = null;
try {
- clone = (ConcurrentSkipListMap) super.clone();
+ @SuppressWarnings("unchecked")
+ ConcurrentSkipListMap clone =
+ (ConcurrentSkipListMap) super.clone();
+ clone.initialize();
+ clone.buildFromSorted(this);
+ return clone;
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
-
- clone.initialize();
- clone.buildFromSorted(this);
- return clone;
}
/**
@@ -1507,7 +1507,7 @@ public class ConcurrentSkipListMap extends AbstractMap
/* ---------------- Serialization -------------- */
/**
- * Save the state of this map to a stream.
+ * Saves the state of this map to a stream (that is, serializes it).
*
* @serialData The key (Object) and value (Object) for each
* key-value mapping represented by the map, followed by
@@ -1532,7 +1532,9 @@ public class ConcurrentSkipListMap extends AbstractMap
}
/**
- * Reconstitute the map from a stream.
+ * Reconstitutes the map from a stream (that is, deserializes it).
+ *
+ * @param s the stream
*/
private void readObject(final java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
@@ -1755,13 +1757,13 @@ public class ConcurrentSkipListMap extends AbstractMap
* @return a navigable set view of the keys in this map
*/
public NavigableSet keySet() {
- KeySet ks = keySet;
- return (ks != null) ? ks : (keySet = new KeySet(this));
+ KeySet ks = keySet;
+ return (ks != null) ? ks : (keySet = new KeySet(this));
}
public NavigableSet navigableKeySet() {
- KeySet ks = keySet;
- return (ks != null) ? ks : (keySet = new KeySet(this));
+ KeySet ks = keySet;
+ return (ks != null) ? ks : (keySet = new KeySet(this));
}
/**
@@ -1783,8 +1785,8 @@ public class ConcurrentSkipListMap extends AbstractMap
* reflect any modifications subsequent to construction.
*/
public Collection values() {
- Values vs = values;
- return (vs != null) ? vs : (values = new Values(this));
+ Values vs = values;
+ return (vs != null) ? vs : (values = new Values(this));
}
/**
@@ -1812,8 +1814,8 @@ public class ConcurrentSkipListMap extends AbstractMap
* sorted in ascending key order
*/
public Set> entrySet() {
- EntrySet es = entrySet;
- return (es != null) ? es : (entrySet = new EntrySet(this));
+ EntrySet es = entrySet;
+ return (es != null) ? es : (entrySet = new EntrySet(this));
}
public ConcurrentNavigableMap descendingMap() {
@@ -2304,8 +2306,8 @@ public class ConcurrentSkipListMap extends AbstractMap
static final class KeySet
extends AbstractSet implements NavigableSet {
- private final ConcurrentNavigableMap m;
- KeySet(ConcurrentNavigableMap map) { m = map; }
+ private final ConcurrentNavigableMap m;
+ KeySet(ConcurrentNavigableMap map) { m = map; }
public int size() { return m.size(); }
public boolean isEmpty() { return m.isEmpty(); }
public boolean contains(Object o) { return m.containsKey(o); }
@@ -2319,11 +2321,11 @@ public class ConcurrentSkipListMap extends AbstractMap
public E first() { return m.firstKey(); }
public E last() { return m.lastKey(); }
public E pollFirst() {
- Map.Entry e = m.pollFirstEntry();
+ Map.Entry e = m.pollFirstEntry();
return (e == null) ? null : e.getKey();
}
public E pollLast() {
- Map.Entry e = m.pollLastEntry();
+ Map.Entry e = m.pollLastEntry();
return (e == null) ? null : e.getKey();
}
public Iterator iterator() {
@@ -2374,20 +2376,20 @@ public class ConcurrentSkipListMap extends AbstractMap
return tailSet(fromElement, true);
}
public NavigableSet descendingSet() {
- return new KeySet(m.descendingMap());
+ return new KeySet(m.descendingMap());
}
}
static final class Values extends AbstractCollection {
- private final ConcurrentNavigableMap