2010-03-27 4 views
-4
class A implements Runnable{ 
    B b=new B(); 
public void run(){ 
    while(true){ 
    System.out.println("H1"+Thread.currentThread().getName()); 
    } 
} 

} 

public class Test { 
public static void main(String[] str){ 
    A a1 =new A(); 
// A a2 =new A(); 
// 
    Thread t1 =new Thread(a1, "Vichi"); 
    Thread t2 =new Thread(a1,"Vishu"); 
    t1.start(); 
    t2.start(); 

} 
} 

seront les ans: 1) seul d'entre eux auront la chance d'exécuter 2), les deux vont obtenir la chance de manière arbitraireordonnancement multitreading ce lié java

s'il vous plaît suggérer possibles ans avec explations

+1

ressemble à des devoirs, n'est-ce pas? – Kiril

+0

Ressemble à une question d'entrevue «codage». N'oubliez pas de mentionner à votre employeur où vous avez obtenu la réponse :-) –

Répondre

2

Aucune synchronisation n'apparaît dans votre code: les deux threads s'exécutent. Maintenant, l'accès à la console est probablement synchronisée quelque part, mais au fond, je vous attendriez à voir quelque chose comme:

H1Vichi 
H1Vichi 
H1Vichi 
H1Vichi 
H1Vichi 
H1Vishu 
H1Vishu 
H1Vishu 
H1Vishu 
H1Vichi 
H1Vichi 
H1Vichi 
H1Vichi 
H1Vishu 
H1Vichi 

etc - imprévisible, et en fonction du nombre de cœurs au sein de votre machine. I suspect vous obtiendrez des blocs de sortie simplement en raison de la synchronisation de la console, mais vous ne devriez pas compter sur elle de toute façon.

Fondamentalement, il n'y a aucune raison pour que les deux threads indépendants ne s'exécutent pas tous les deux, simplement parce qu'ils partagent la même cible exécutable.