面試題。執行緒pingpong的輸出問題

2022-09-02 05:42:12 字數 900 閱讀 1367

第一種情況:

public class main

}; t.run();

system.out.println("ping");

}static void pong()

}輸出:pingpong 解釋:呼叫run()方法,整個程式只有乙個執行緒,主線程,run()是runnable介面中定義的乙個方法,是為了讓客戶程式設計師在這個方法裡寫自己的功能**的。直接呼叫和普通的類呼叫自己的成員方法是沒有任何區別的。

第二種情況

public static void main(string args) 

}; t.start();

system.out.println("ping");

}static void pong()

}輸出:pongping,解釋:用start()方法之後,程式就會多出乙個執行緒,設定新執行緒進入 「就緒」 狀態,等待 cpu 排程之後才會執行

這時才有和主線程爭cpu。
而下乙個 system.out.print() 幾乎(概率大於99%)可以認為是立即接著執行的。

所以,最終效果就是,幾乎都是 pongping。

第三種情況

public class test02 catch (interruptedexception e)

pong();}};

t.start();// 換成t.run(),觀察不同一般在筆試題中是陷阱,混淆start

mthread.sleep(250);// 2.  這句話注釋掉和不注釋掉的區別,或者更改sleep裡面時間的區別

system.out.println("ping");

}static void pong()

輸出pingpong和pongping都有可能

面試題 執行緒

今天公司新來的小夥伴問了我這樣乙個面試題 他不清楚為什麼最後輸出的是thread中的方法,而不是runnable中的方法,然後我看了下他從網上搜出的別人寫的答案,很多東西對於懂的人來說很容易就能看懂,但是對於剛剛踏入這一行業的人來說,他不明白。所以希望很多在這塊迷茫的小夥伴能夠更好的掌握這一點,那麼...

多執行緒面試題

題目 主線程執行10次,子執行緒執行10次,此過程重複50次 package com.thread.test function 主線程執行10次,子執行緒執行10次,此過程重複50次 public class threadproblem start for int j 0 j 50 j class ...

面試題 多執行緒

現有程式同時啟動了4個執行緒去呼叫testdo.dosome key,value 方法,由於testdo.dosome key,value 方法內的 是先暫停1秒,然後再輸出以秒為單位的當前時間值,所以,會列印出4個相同的時間值,如下所示 4 4 1258199615 1 1 1258199615 ...