Se eu tiver um código (guardanapo) parecido com este:
public static SomeClass someInstance;
ThreadLocal<HashMap<Integer, SomeClass>> locals = new ThreadLocal<>(){
@Override protected HashMap<Integer, SomeClass> initialValue() {
return new HashMap<Integer,SomeClass>(){{put(5,someInstance);}};
}
}
O que ele realmente faz? Se a thread1 alterar alguma Classe acessando-a por meio de seu hashmap threadlocal, essas alterações serão visíveis para a thread2 (eventualmente)?
Para o meu uso, está tudo bem se houver uma condição de corrida entre o momento em que os dados são gravados em someClass e o momento em que outro thread observa a alteração, mas não estará tudo bem se o thread leitor nunca vir a alteração, mesmo depois de muito tempo.