2015-11-02 3 views
0

Voici une question de la décharge SCJP:Obtenir la sortie avec deux fils d'exécution

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(); 
    } 
} 

Quels sont les résultats possibles?

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

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

C. 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,

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

dans la décharge, il dit que les réponses sont A et C. Cependant, je ne sais pas h La réponse A peut être possible car la dernière sortie (6) est plus petite que les sorties précédentes.

Répondre

0

A - possible si un thread imprime 0, 2, puis les deux obtiennent 4 à courant et sauve 6 à x (les deux), puis tous les deux obtiennent 6 à courant, et second va à la fin - affiche 6, 8, 10, après cette première impression 6.

0

Comme il y a deux fils en cours d'exécution SIMULTANÉMENT ...

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