I have a Spring bean class that look similar to the following:
@Component
public class Foo{
    private Config conf;
    @PostConstruct
    public void init(){
        conf = ConfigFileLoader.loadConfigFromFile();
    }
    public Config getConfig(){
        return conf;
    }
    public void updateConfig(){
        conf = ConfigFileLoader.loadConfigFromFile();
    } 
}
ConfigFileLoader.loadConfigFromFile() reads configuration from file and returns a new Config object.
There are two types of threads:
- Updater thread: 
- there is only one
- it calls updateConfig periodically (when it detects changes on the configuration file)
 
- Reader thread: 
- multiple threads are calling getConfig using the Config object for execution.
- does not care if it receives a stale Config object instance for current execution as long as eventually reader threads start getting an up to date Config object.
 
My question is this, should i mark the private conf field as volatile or maybe add some kind of synchronisation for conf field?
My fear is the following scenario: the Updater thread updates the conf reference but the change is never made visible to the reader threads.
Any help or explanation will be appreciated.
 
     
     
    