A member variable's hashCode() value is different
        Posted  
        
            by Jacques René Mesrine
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Jacques René Mesrine
        
        
        
        Published on 2010-05-09T10:27:46Z
        Indexed on 
            2010/05/09
            10:38 UTC
        
        
        Read the original article
        Hit count: 265
        
java
|multithreading
There's a piece of code that looks like this. The problem is that during bootup, 2 initialization takes place. (1) Some method does a reflection on ForumRepository & performs a newInstance() purely to invoke #setCacheEngine. (2) Another method following that invokes #start(). I am noticing that the hashCode of the #cache member variable is different sometimes in some weird scenarios. Since only 1 piece of code invokes #setCacheEngine, how can the hashCode change during runtime (I am assuming that a different instance will have a different hashCode). Is there a bug here somewhere ?
public class ForumRepository implements Cacheable
{
    private static CacheEngine cache;
    private static ForumRepository instance;
    public void setCacheEngine(CacheEngine engine) { cache = engine; }
    public synchronized static void start()
    {
        instance = new ForumRepository();
    }
    public synchronized static void addForum( ... )
    {
        cache.add( .. );
        System.out.println( cache.hashCode() );
        // snipped
    }
    public synchronized static void getForum( ... )
    {
        ... cache.get( .. );
        System.out.println( cache.hashCode() );
        // snipped
    }
}
© Stack Overflow or respective owner