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
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
.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.
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.
Il est trop rapide de produire 10 nombres. Essayez de changer 10 en 100.
Ajouter un temps de mise en veille du fil
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
Ajoutez Thread.sleep(1000) avant les instructions de sortie dans les deux boucles for
Réessayez
Les fils de discussion ne garantissent pas l'ordre d'exécution.
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.
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.