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

学习是最好的投资!

membalas semua(13)
阿神

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

伊谢尔伦

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.

迷茫

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.

小葫芦

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

黄舟

Tambahkan masa tidur urutan

伊谢尔伦

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 Milik saya macam ni

Ty80

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

阿神

Benang tidak menjamin susunan pelaksanaan.

左手右手慢动作

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.

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan