Vijay is right, the code you provided will indeed fail in runtime with NullPointerException. But if you change variable c to be static (on line 12), it will be initialized on line 17 and answers will be indeed C and E.
Two new threads are started on lines 18 and 19. We don't know which one will actually start first, so right answer could start with any thread ID (in our case 2 and 4). But we have only two threads, so only two thread IDs, that's why answer B is wrong. Neither thread is daemon thread and neither thread is interrupted in any way, so yack method will be executed in full, i.e. will output thread ID two times, that's why answer D is wrong. Thread.yield() on line 7 will pause current thread to allow other threads to be executed, but yack method is synchronized. That means it could be rewritten as follows: I.e. only one thread could call yack method of the same instance of Chicks class in the same time. With changes to line 12 i proposed above we will have single instance of Chicks class, i.e. both threads will be executed one by one. Considering that we don't know which out of two our threads will actually start first, right answers are C and E.