@Override
  public boolean remove(Object key, Object value) {
    return remove(key, value, null);
  }
If the specified key is not already associated with a value, associate it with the given value.
This is equivalent to

<pre>
if (!region.containsKey(key))
  return region.put(key, value);
else
  return region.get(key);
</pre>

Except that the action is performed atomically.

<i>Note that if this method returns null then there is no way to determine definitely whether
this operation succeeded and modified the region, or if the entry is in an invalidated state
and no modification occurred.</i>

If this method does not modify the region then no listeners or other callbacks are executed. If
a modification does occur, then the behavior with respect to callbacks is the same as
{@link Region#create(Object, Object)}.

@param key key with which the specified value is to be associated.
@param value the value for the new entry, which may be null meaning the new entry starts as if
       it had been locally invalidated.
@return previous value associated with specified key, or <tt>null</tt> if there was no mapping
        for key. A <tt>null</tt> return can also indicate that the entry in the region was
        previously in an invalidated state.
@throws ClassCastException if key does not satisfy the keyConstraint
@throws IllegalArgumentException if the key or value is not serializable and this is a
        distributed region
@throws TimeoutException if timed out getting distributed lock for {@code Scope.GLOBAL}
@throws NullPointerException if key is <tt>null</tt>
@throws PartitionedRegionStorageException if the operation could not be completed.
geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java