Rumah  >  Soal Jawab  >  teks badan

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 
PHPzPHPz2766 hari yang lalu1482

membalas semua(13)saya akan balas

  • 阿神

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

    Kelajuan pelaksanaan CPU terlalu pantas, dan bilangannya terlalu kecil untuk melihat perbezaannya. Jika saya, sekurang-kurangnya Integer.MaxValue.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:29:18

    Jika tiada kunci penyegerakan, kedua-dua utas tidak akan mempunyai cetakan silang yang anda nyatakan Keutamaan pelaksanaan utas bergantung pada siapa yang memperoleh sumber CPU dahulu. Mari kita lihat lebih dekat pengetahuan Java multi-threading.

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:29:18

    Bilangan tetapan adalah terlalu kecil Jika anda menetapkan 100 nombor, anda boleh melihat kesan pencetakan dua benang bersilang (persimpangan di sini bukanlah benang 1 mencetak nombor dan benang 2 mencetak nombor serta-merta, tetapi membahagikan mengikut urutan. segmen). ;CPU mengambil sumber dan melaksanakannya. Jika anda ingin melaksanakan percetakan silang, ia adalah contoh pengeluaran dan pengguna.

    balas
    0
  • 高洛峰

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

    Terlalu pantas untuk mengeluarkan 10 nombor. Cuba tukar 10 kepada 100.

    balas
    0
  • 黄舟

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

    Tambahkan masa tidur urutan

    balas
    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 Milik saya macam ni

    balas
    0
  • PHP中文网

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

    Tambah Thread.sleep(1000) sebelum pernyataan output dalam dua gelung;

    balas
    0
  • 阿神

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

    Benang tidak menjamin susunan pelaksanaan.

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:29:18

    Turutan pelaksanaan utas tidak pasti Sesiapa yang merampas CPU akan melaksanakannya. Susunan sepuluh nombor tidak semestinya milik anda. Selain itu, keutamaan utas tidak dapat menjamin susunan pelaksanaan utas. Cuma benang dengan keutamaan yang lebih tinggi mempunyai kebarangkalian yang lebih tinggi untuk mendapatkan sumber CPU.

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:29:18

    public void run() {
                    for (int i=0; i<10; i++){
                        System.out.print(i+" ");
                        Sleep(1000);
                    }
                }

    Dengan cara ini, kita dapat melihat fenomena cetakan silang yang agak jelas, tetapi sebenarnya, konkurensi bermakna kita tidak dapat mengetahui utas mana yang dilaksanakan dahulu dan utas mana
    laksana kemudian, dan ini tidak semestinya akan berlaku menjadi silang. Secara berlebihan, memasukkan m, n arahan pemasangan dua utas masing-masing boleh mempunyai
    C_{m+n-1}^{min(m,n)}tertib pelaksanaan peringkat faktor.

    balas
    0
  • Batalbalas