Tricker than I like: In Java, how do you keep a map with the values being the "most recent timestamp" for the key? How do you do this for a concurrent map with multiple threads updating?
boolean isLatest(final K key, final long newTimestamp,
        final ConcurrentMap<K, Long> map) {
    Long oldTimestamp = map.putIfAbsent(key, newTimestamp);
    // If we are first, there is no previous to compare
    // with
    if (null == oldTimestamp)
        return true;
    // Make sure we are still the most recent
    while (newTimestamp > oldTimestamp) {
        if (map.replace(key, oldTimestamp, newTimestamp))
            // No other thread has updated, we are most
            // recent
            return true;
        // Another thread got here first, recheck
        oldTimestamp = map.get(key);
    }
    // Another thread put in a newer update, we are not
    // most recent
    return false;
} As with all multi-threaded coding, bugs are easy to make and hard to spot. If I have made one, please let me know!
UPDATE: Fixed a typo. Thanks, David!
 
