Maison > Questions et réponses > le corps du texte
public static void main(String[] args){
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
}
}
}).start();
}
输出结果如下:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
阿神2017-04-18 10:29:18
La vitesse d'exécution du processeur est trop rapide et les chiffres sont trop petits pour voir la différence Si c'était moi, au moins Integer.MaxValue
.
伊谢尔伦2017-04-18 10:29:18
S'il n'y a pas de verrou de synchronisation, les deux threads n'auront pas l'impression croisée que vous avez mentionnée. La priorité d'exécution du thread dépend de qui obtient les ressources CPU en premier. Votre programme ne peut pas garantir quel thread s'exécute en premier. Examinons de plus près les connaissances multithreading Java.
迷茫2017-04-18 10:29:18
Le nombre de paramètres est trop petit. Si vous définissez 100 nombres, vous pouvez voir l'effet d'impression de deux fils qui se croisent (le croisement ici n'est pas que le fil 1 imprime un numéro et le fil 2 imprime un numéro immédiatement, mais segmente par segment). ;Le CPU récupère la ressource et l’exécute. Si vous souhaitez mettre en œuvre l'impression croisée, c'est un exemple de production et de consommation.
高洛峰2017-04-18 10:29:18
Il est trop rapide de produire 10 nombres. Essayez de changer 10 en 100.
伊谢尔伦2017-04-18 10:29:18
0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 Le mien est comme ça Pensez-y par vous-même
PHP中文网2017-04-18 10:29:18
Ajoutez Thread.sleep(1000) avant les instructions de sortie dans les deux boucles for
Réessayez
ringa_lee2017-04-18 10:29:18
L'ordre d'exécution des threads est incertain. Celui qui s'empare du CPU l'exécutera. L'ordre des dix nombres n'est pas forcément le vôtre. Si vous l'exécutez plusieurs fois, des résultats différents apparaîtront. De plus, la priorité du thread ne peut garantir l’ordre d’exécution du thread. C'est juste que les threads avec une priorité plus élevée ont une probabilité plus élevée d'obtenir des ressources CPU.
迷茫2017-04-18 10:29:18
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
Sleep(1000);
}
}
De cette façon, vous pouvez voir un phénomène d'impression croisée relativement évident, mais en fait, la concurrence signifie que nous ne pouvons pas savoir quel thread s'exécute en premier et quel thread
s'exécute plus tard, et cela ne signifie pas nécessairement qu'il y aura être croisé. De manière exagérée, l'insertion de m, n instructions d'assemblage de deux threads respectivement peut avoir
C_{m+n-1}^{min(m,n)>ordre d'exécution des niveaux factoriels.