pingpong執行緒輸出問題

2022-09-02 05:36:09 字數 598 閱讀 5954

面試遇到兩次一下題:

public

class

main

}; t.run();

system.out.println("ping");

}static

void

pong()

}

注意t呼叫的方法。通過上網查資料和實際演示,總結如下:

如果是t.run(),執行很多次,結果都是pong ping。後來終於發現了關鍵點所在,執行緒物件t,呼叫的不是start()方法,而是run()方法。後來開斷點模式debug,發現呼叫run()方法,整個程式只有乙個執行緒,而呼叫start()方法之後,程式就會多出乙個執行緒。這時才有和主線程爭cpu,可能出現多種結果的情況,但由於下面輸出方法很快就被執行了,所以基本上都是「ping pong」的輸出。

所以run()和start()的區別就是:

run()是runnable介面中定義的乙個方法,是為了讓客戶程式設計師在這個方法裡寫自己的功能**的。直接呼叫和普通的類呼叫自己的成員方法是沒有任何區別的。

而start()則是執行緒開始執行的標誌,當這個方法被呼叫後,程式中才會多出乙個獨立的執行緒,接著便是執行run()方法。

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

第一種情況 public class main t.run system.out.println ping static void pong 輸出 pingpong 解釋 呼叫run 方法,整個程式只有乙個執行緒,主線程,run 是runnable介面中定義的乙個方法,是為了讓客戶程式設計師在這個方...

逆序輸出問題

一,題目 輸入乙個鍊錶的頭結點,從尾到頭反過來輸出每個結點的值。鍊錶結點定義如下 struct listnode 二,分析 解法二 從頭到尾遍歷鍊錶,每經過乙個結點的時候,把該結點放到乙個棧中。當遍歷完整個鍊錶後,再從棧頂開始輸出結點的值,此時輸出的結點的順序已經反轉過來了。該方法需要維護乙個額外的...

php輸出問題

輸出問題 a a3df b 256 echo a echo print a echo printf a s,b d a b echo 輸出問題,一般情況用echo 它可以連續輸出,如 echo a b sffjfh echo print的輸出有返回值 print是函式 return print b ...