java - new了2个Thread,为什么不是交叉打印?
PHPz
PHPz 2017-04-18 10:27:18
0
13
1499
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 
PHPz
PHPz

学习是最好的投资!

répondre à tous(13)
阿神

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

Ty80

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.

迷茫
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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal