2015-11-02 4 views
0

Вот вопрос от SCJP отвала:Получение вывода с двумя нитями, исполняющих

public class Threads1 { 
    int x=0; 
    public class Runner implements Runnable{ 
      public void run(){ 
       int current=0; 
       for (int i=0; i<4; i++){ 
        current = x; 
        System.out.print(current + ','); 
        x=current +2; 
       } 
      } 
    } 

    public static void main(String[] args){ 
      new Threads1().go(); 
    } 

    public void go(){ 
      Runnable r1 = new Runner(); 
      new Thread(r1).start(); 
      new Thread(r1).start(); 
    } 
} 

Каковы возможные результаты?

А. 0, 2, 4, 4, 6, 8, 10, 6,

Б. 0, 2, 4, 6, 8, 10, 2, 4,

С. 0, 2, 4, 6, 8, 10, 12, 14,

D. 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14,

Е. 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,

В свалке он говорит, что ответы A и C. Однако я не знаю, h ow ответ A может быть возможным, поскольку последний выход (6) меньше, чем предыдущие.

ответ

0

A - возможно, если один поток печатает 0, 2, то оба получают от 4 до тока и сохраняют 6 до x (оба), затем оба получаются от 6 до текущего, а второй заканчивается - отпечатки 6, 8, 10, после того, что первые отпечатки 6.

0

Поскольку две нити бегущие simulataneously ...

It might result in the following at every iteration you are adding +2 
thread 1- 0 2 4 6 8 10 
thread 2-  4  6