Mapa bidireccional concurrente en java

Estoy escribiendo código para el procesamiento de texto, y las cosas van mucho más rápido si primero convierto las cadenas a enteros. Para hacer esto, hice una clase de Diccionario, donde cada vez que veo una nueva cadena, le doy un índice y mantengo dos mapas, uno de cadena a int, y uno de int a cadena, para que pueda buscar fácilmente en ambos sentidos. . Aquí está el código:

class Dictionary {
    private Map<String, Integer> map;
    private Map<Integer, String> reverse_map;
    private int nextIndex;

    public Dictionary() {
        map = new HashMap<String, Integer>();
        reverse_map = new HashMap<Integer, String>();
        nextIndex = 1;
    }

    public int getIndex(String string) {
        if (!map.containsKey(string)) {
            map.put(string, nextIndex);
            reverse_map.put(nextIndex, string);
            nextIndex++;
        }
        return map.get(string);
    }

    public String getString(int index) {
        // getIndex is always called first, so we don't need to check anything
        return reverse_map.get(index);
    }
}

Esto ha estado funcionando bien para mí en mi código de subproceso único. Pero ahora quiero darle a estos múltiples hilos para acelerarlo más, y no estoy seguro de cómo hacerlo. Pensé en usar ConcurrentHashMap, pero no estoy seguro de queputIfAbsent eso garantice que no use un índice dos veces. No quería usar Collections.synchronizedMap, porque este diccionario se accede con mucha frecuencia a través de los hilos y, por lo tanto, probablemente no estaría mucho mejor que con un solo hilo, ya que bloquea cada lectura y escritura. ¿Hay alguna manera de hacer que esto funcione?

Respuesta 1

Nuevo en Elastic search, utilizando un índice para almacenar los documentos que, por ejemplo, es información de la compañía sobre los empleados, actualmente hay 600,000 datos de empleados en el índice, entre estos empleados necesitamos ...

PersistenceHelper-context.xml <bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> <! ----> <nombre de propiedad = "driverClassName" value = "org ....

¿Hay alguna manera de comunicarse entre subprocesos, como obtener variables con getters a medida que se actualizan en un subproceso diferente? Por ejemplo, si estoy cargando imágenes en un subproceso ejecutable de esta manera: Subproceso ...

Tengo un RestTemplate que lo construyo con RestTemplateBuilder. Configuré el rootUri para el constructor. En el siguiente método (updateState1) a veces recibí el error "URI no es absoluto". Por ejemplo cuando llamé ...