Вот это работает:
public static synchronized IMF getFund() {
        //add your code here - добавь код тут
            if (imf==null) imf=new IMF();
            return imf;
    }
А тут вылезает StackOverflowError:
public static IMF getFund() {
        //add your code here - добавь код тут
        synchronized (IMF.getFund()) {  //если вместо getFund() написать class, то все норм.
            if (imf==null) imf=new IMF();
            return imf;
        }
    }