Sfoglia il codice sorgente

concurrency improvements

tags/2.0.1
Jonathan Cobb 5 anni fa
parent
commit
8c85b0660a
3 ha cambiato i file con 26 aggiunte e 1 eliminazioni
  1. +16
    -0
      src/main/java/org/cobbzilla/util/collection/ExpirationMap.java
  2. +9
    -1
      src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java
  3. +1
    -0
      src/main/java/org/cobbzilla/util/time/TimeUtil.java

+ 16
- 0
src/main/java/org/cobbzilla/util/collection/ExpirationMap.java Vedi File

@@ -11,6 +11,8 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;

import static org.cobbzilla.util.daemon.ZillaRuntime.notSupported;
@@ -92,6 +94,20 @@ public class ExpirationMap<K, V> implements Map<K, V> {
return map.values().stream().map(v -> v.value).collect(Collectors.toList());
}

@Override public V putIfAbsent(K key, V value) {
final ExpirationMapEntry<V> val = map.putIfAbsent(key, new ExpirationMapEntry<>(value));
return val == null ? null : val.value;
}

@Override public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
return map.computeIfAbsent(key, k -> new ExpirationMapEntry<>(mappingFunction.apply(k))).value;
}

@Override public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
final ExpirationMapEntry<V> found = map.computeIfPresent(key, (k, vExpirationMapEntry) -> new ExpirationMapEntry<>(remappingFunction.apply(k, vExpirationMapEntry.value)));
return found == null ? null : found.value;
}

@AllArgsConstructor
private static class EMEntry<K, V> implements Entry<K, V> {
@Getter private K key;


+ 9
- 1
src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java Vedi File

@@ -330,7 +330,15 @@ public class ZillaRuntime {
final StringBuilder b = new StringBuilder();
for (Object thing : things) {
if (b.length() > 0) b.append("\t");
b.append(thing == null ? "null" : (thing instanceof Object[]) ? Arrays.deepHashCode((Object[]) thing) : thing.hashCode());
if (thing == null) {
b.append("null");
} else if (thing instanceof String) {
b.append(thing);
} else if (thing instanceof Object[]) {
b.append(Arrays.deepHashCode((Object[]) thing));
} else {
b.append(thing.hashCode());
}
}
return sha256_hex(b.toString());
}


+ 1
- 0
src/main/java/org/cobbzilla/util/time/TimeUtil.java Vedi File

@@ -29,6 +29,7 @@ public class TimeUtil {
public static final DateTimeFormatter DATE_FORMAT_YYYY_MMM_DD = DateTimeFormat.forPattern("yyyy MMM dd");
public static final DateTimeFormatter DATE_FORMAT_MMM_DD_YYYY = DateTimeFormat.forPattern("MMM dd, yyyy");
public static final DateTimeFormatter DATE_FORMAT_YYYY_MM_DD_HH_mm_ss = DateTimeFormat.forPattern("yyyy-MM-dd-HH-mm-ss");
public static final DateTimeFormatter DATE_FORMAT_YYYY_MM_DD_HH_mm_ss_SSS = DateTimeFormat.forPattern("yyyy-MM-dd-HH-mm-ss-SSS");
public static final DateTimeFormatter DATE_FORMAT_YYYYMMDDHHMMSS = DateTimeFormat.forPattern("yyyyMMddHHmmss");
public static final DateTimeFormatter DATE_FORMAT_YYYY_MM_DD_HH = DateTimeFormat.forPattern("yyyy-MM-dd-HH");
public static final DateTimeFormatter DATE_FORMAT_HYPHEN_MMDDYYYY = DateTimeFormat.forPattern("MM-dd-yyyy");


Caricamento…
Annulla
Salva