>>722
そりゃgetInstance()は何度も呼ばれるだろうが、
2度目以降に初期化しないようにコード書くだけじゃないの?

static boolean first = false
public synchronized S getInstance(){
  if(first){
    // 初期化
  } else {
    return this;
  }
}