D.java

public class D extends C {
  private Object o2; // la JVM initialise par défaut ces champs à null
  private Object[] array;
  /**
   * Crée et démarre un processus léger qui exécute cette instance de D.
   * Ce constructeur débute par un appel implicite au constructeur de sa
   * super-classe, C(), qui crée et démarre un processus léger.
   */
  public D() {
    // Initialisations coûteuses en temps avant d'initialiser o2
    array = new Object[1000000];
    for (int i = 0; i<1000000; i++)
      array[i] = new Object();
    o2 = new Object();
  }
  public void run() {
    System.out.println("o1: " + o1);
    System.out.println("o2: " + o2);    
    System.out.println("array: " + array);    
  }
  
  public static void main(String[] args) {
    // La création d'une instance de D crée implicitement une instance
    // de C qui démarre un processus léger qui exécute la méthode run().
    new D();
  }
}