Fixed warning in AbstractConcurrentSet
This commit is contained in:
parent
ff4dd6271f
commit
e0b9d8addb
@ -29,24 +29,25 @@ public abstract class AbstractConcurrentSet<T> implements IConcurrentSet<T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(T element) {
|
public void add(T element) {
|
||||||
if (element == null) return;
|
if (element == null) {
|
||||||
Lock writeLock = lock.writeLock();
|
return;
|
||||||
|
}
|
||||||
|
Lock writeLock = this.lock.writeLock();
|
||||||
writeLock.lock();
|
writeLock.lock();
|
||||||
if (element == null || entries.containsKey(element)) {
|
if (this.entries.containsKey(element)) {
|
||||||
writeLock.unlock();
|
|
||||||
} else {
|
} else {
|
||||||
insert(element);
|
insert(element);
|
||||||
writeLock.unlock();
|
|
||||||
}
|
}
|
||||||
|
writeLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean contains(T element) {
|
public boolean contains(T element) {
|
||||||
Lock readLock = lock.readLock();
|
Lock readLock = this.lock.readLock();
|
||||||
ISetEntry<T> entry;
|
ISetEntry<T> entry;
|
||||||
try {
|
try {
|
||||||
readLock.lock();
|
readLock.lock();
|
||||||
entry = entries.get(element);
|
entry = this.entries.get(element);
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
readLock.unlock();
|
readLock.unlock();
|
||||||
@ -55,20 +56,20 @@ public abstract class AbstractConcurrentSet<T> implements IConcurrentSet<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void insert(T element) {
|
private void insert(T element) {
|
||||||
if (!entries.containsKey(element)) {
|
if (!this.entries.containsKey(element)) {
|
||||||
head = createEntry(element, head);
|
this.head = createEntry(element, this.head);
|
||||||
entries.put(element, head);
|
this.entries.put(element, this.head);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
return entries.size();
|
return this.entries.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addAll(Iterable<T> elements) {
|
public void addAll(Iterable<T> elements) {
|
||||||
Lock writeLock = lock.writeLock();
|
Lock writeLock = this.lock.writeLock();
|
||||||
try {
|
try {
|
||||||
writeLock.lock();
|
writeLock.lock();
|
||||||
for (T element : elements) {
|
for (T element : elements) {
|
||||||
@ -87,21 +88,21 @@ public abstract class AbstractConcurrentSet<T> implements IConcurrentSet<T> {
|
|||||||
// return quickly
|
// return quickly
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
Lock writeLock = lock.writeLock();
|
Lock writeLock = this.lock.writeLock();
|
||||||
try {
|
try {
|
||||||
writeLock.lock();
|
writeLock.lock();
|
||||||
ISetEntry<T> listelement = entries.get(element);
|
ISetEntry<T> listelement = this.entries.get(element);
|
||||||
if (listelement == null) {
|
if (listelement == null) {
|
||||||
return false; //removed by other thread in the meantime
|
return false; //removed by other thread in the meantime
|
||||||
}
|
}
|
||||||
if (listelement != head) {
|
if (listelement != this.head) {
|
||||||
listelement.remove();
|
listelement.remove();
|
||||||
} else {
|
} else {
|
||||||
// if it was second, now it's first
|
// if it was second, now it's first
|
||||||
head = head.next();
|
this.head = this.head.next();
|
||||||
//oldHead.clear(); // optimize for GC not possible because of potentially running iterators
|
//oldHead.clear(); // optimize for GC not possible because of potentially running iterators
|
||||||
}
|
}
|
||||||
entries.remove(element);
|
this.entries.remove(element);
|
||||||
} finally {
|
} finally {
|
||||||
writeLock.unlock();
|
writeLock.unlock();
|
||||||
}
|
}
|
||||||
@ -127,13 +128,13 @@ public abstract class AbstractConcurrentSet<T> implements IConcurrentSet<T> {
|
|||||||
// not thread-safe! must be synchronized in enclosing context
|
// not thread-safe! must be synchronized in enclosing context
|
||||||
@Override
|
@Override
|
||||||
public void remove() {
|
public void remove() {
|
||||||
if (predecessor != null) {
|
if (this.predecessor != null) {
|
||||||
predecessor.next = next;
|
this.predecessor.next = this.next;
|
||||||
if (next != null) {
|
if (this.next != null) {
|
||||||
next.predecessor = predecessor;
|
this.next.predecessor = this.predecessor;
|
||||||
}
|
}
|
||||||
} else if (next != null) {
|
} else if (this.next != null) {
|
||||||
next.predecessor = null;
|
this.next.predecessor = null;
|
||||||
}
|
}
|
||||||
// can not nullify references to help GC since running iterators might not see the entire set
|
// can not nullify references to help GC since running iterators might not see the entire set
|
||||||
// if this element is their current element
|
// if this element is their current element
|
||||||
@ -143,12 +144,12 @@ public abstract class AbstractConcurrentSet<T> implements IConcurrentSet<T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Entry<T> next() {
|
public Entry<T> next() {
|
||||||
return next;
|
return this.next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
next = null;
|
this.next = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user