recherche

Maison  >  Questions et réponses  >  le corps du texte

java - new了2个Thread,为什么不是交叉打印?

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 
PHPzPHPz2802 Il y a quelques jours1502

répondre à tous(13)je répondrai

  • 阿神

    阿神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.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦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.

    répondre
    0
  • 迷茫

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

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 10:29:18

    Il est trop rapide de produire 10 nombres. Essayez de changer 10 en 100.

    répondre
    0
  • 黄舟

    黄舟2017-04-18 10:29:18

    Ajouter un temps de mise en veille du fil

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:29:18

    Ajoutez Thread.sleep(1000) avant les instructions de sortie dans les deux boucles for
    Réessayez

    répondre
    0
  • 阿神

    阿神2017-04-18 10:29:18

    Les fils de discussion ne garantissent pas l'ordre d'exécution.

    répondre
    0
  • ringa_lee

    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.

    répondre
    0
  • 迷茫

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

    répondre
    0
  • Annulerrépondre