I\'ve read around quite a bit but haven\'t found a definitive answer.
I have a class that looks like this:
    public class Foo() {
        private          
        
There is nothing inherently thread safe about a final static variable. Declaring a member variable final static only ensures that this variable is assigned to just once.
The question of thread safety has less to do with how you declare the variables but instead relies on how you interact with the variables. So, it's not really possible to answer your question without more details on your program:
sharedData variable?sharedData?Using a ConcurrentHashMap only guarantees that the individual methods of the Map are thread-safe, it doesn't make an operation such as this thread-safe:
if (!map.containsKey("foo")) {
    map.put("foo", bar);
}