¿Cómo puedo realizar una obtención segura para subprocesos y luego eliminarla con ConcurrentHashMap?

En una entrevista, me pidieron que verificara si el siguiente código funciona según lo previsto.

ConcurrentHashMap<Integer, Integer> chm = new ConcurrentHashMap<>();

if (chm.get(key) != null) {
    chm.get(key).doSomething();
    chm.remove(key);
}

Según JavaDocs, getdevuelve el valor de la última operación de actualización completada. Entonces, si el hilo 1 ya llamó chm.remove(key)y si el hilo 2 entró dentro de la instrucción if y está a punto de llamar al getmétodo, entonces podríamos obtener una excepción. ¿Es esto correcto?

¿Cómo puedo hacer que este hilo sea seguro?

Respuesta 1

La compilación escalonada de HotSpot utiliza el intérprete hasta que un umbral de invocaciones (para métodos) o iteraciones (para bucles) desencadena una compilación del cliente con autoperforación. La compilación del cliente es ...

Quiero determinar si una cadena dada coincide, ignorando mayúsculas y minúsculas, uno de los elementos en una Lista <String>. Estoy tratando de lograr esto con las transmisiones de Java 8. Aquí está mi intento de usar .orElse (falso): ...

Estoy haciendo una clase en Java que descarga un archivo específico de un servidor. Tengo un método que puede descargar directamente desde un servidor FTP y uno desde un servidor SFTP. Sin suposiciones hechas ...

El siguiente código produce una EOFException. ¿Porqué es eso? información estática pública readInfoDataFromFile (contexto de contexto) {Info InfoData = null; FileInputStream fis = null; ObjectInputStream ...