asignar campo de instancia a variable local

Este es el método keySet () en la clase HashMap de JDK. ¿Por qué el autor asignó el campo (keySet) a la variable local ks?

public Set<K> keySet() {
    Set<K> ks;
    return (ks = keySet) == null ? (keySet = new KeySet()) : ks;
}

¿Cuál es la diferencia entre lo anterior y lo inferior? ¿Tiene esto algo que ver con la seguridad del hilo?

public Set<K> keySet() {
    return (keySet == null ? (keySet = new KeySet()) : keySet;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta