Threads en Java - Duda en este quiz.

Hola que tal, aquí estoy nuevamente en los foros. Ahora tengo una duda respecto a Threads en Java y puse este pequeño ejercicio para poder explicarme mejor. La respuesta de este quiz realmente no es tan complicada, ya que la respuesta es la F. An exception is thrown at runtime, mi duda va mas a cerca del método getId( ), ya que si Chicks c; fuera static entonces el código compila con éxito y las respuestas correctas serían C y E y lo que no comprendo es por qué razón se imprimen los número 4 y 2 para los threads. Entonces mi duda es: ¿De que manera se asignan los ID en los threads? Yo pensaba que se asignan de manera secuencial. Bueno espero haberme explicado, y estaré al tanto de su ayuda. Gracias.

class Chicks {
   synchronized void yack(long id) {
     for(int x = 1; x < 3; x++) {
       System.out.print(id + " ");
       Thread.yield();
     }
  }
 }
 public class ChicksYack implements Runnable {
   Chicks c;
   public static void main(String[] args) {
     new ChicksYack().go();
   }
   void go() {
     c = new Chicks();
     new Thread(new ChicksYack()).start();
     new Thread(new ChicksYack()).start();
   }
   public void run() {
     c.yack(Thread.currentThread().getId());
   }
 }

Which are true? (Choose all that apply.)
A. Compilation fails
B. The output could be 4 4 2 3
C. The output could be 4 4 2 2
D. The output could be 4 4 4 2
E. The output could be 2 2 4 4
F. An exception is thrown at runtime

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Engañoso

El código es un poco engañoso. La excepción se arroja porque la instancia de Chicks que se crea en el método go, existe solamente para la instancia de ChicksYack que se creó desde el main estático. Pero en el go() se crean otras dos instancias de ChicksYack(), una como target de cada Thread; esas dos instancias no tienen un Chicks asignado, está en nulo, por lo tanto se arroja NPE en la línea dentro del método run() de ChicksYack porque "c" es null en ambos casos.