面試題 執行緒

2021-08-21 15:55:24 字數 1668 閱讀 9486

今天公司新來的小夥伴問了我這樣乙個面試題:

他不清楚為什麼最後輸出的是thread中的方法,而不是runnable中的方法,然後我看了下他從網上搜出的別人寫的答案,很多東西對於懂的人來說很容易就能看懂,但是對於剛剛踏入這一行業的人來說,他不明白。所以希望很多在這塊迷茫的小夥伴能夠更好的掌握這一點,那麼我來說一下啊。如有不對的地方,歡迎指正!謝謝!

1,首先我們這樣去分析,

相信大家對於這樣的答案都毫無疑問吧,如果有疑問的話,建議哥們再去看看執行緒方面的基礎知識吧!

1.1,根據原始碼,我們可以看到:

1.2  呼叫了init方法,其中的target就是我們通過thread建構函式傳遞過來的runnable介面的實現類(包括匿名實現)

1.3最終走到這個方法體中,多餘的不看,這個方法中有乙個

將我們傳遞過來的實現類物件賦值給了thread中的變數

1.4 賦值完成後,開始執行start方法,最終執行thread中的run方法:

判斷target是否為空,為空則不執行run方法,不為空則執行實現類中的run方法,即我上面所寫的

到這一步,相信不懂的小夥伴應該也有個大致的了解了吧.

2 ,對於實現了介面runnable的方式大家應該有些了解了,那我們現在看下實現類的

2.1 這一步相當於重寫了thread中的run方法,從而去執行重寫後的run方法,結果為:上圖所示

3,兩個結合起來:

由於在new thread後重寫了thread中的run方法(相當於乙個類繼承了thread,並重寫了thread的run方法),所以在執行thread中的start方法時,就不會再走父類的thread中的方法,而是會走重寫後的run方法,所以這題的輸出結果為:我是thread中的方法

4,那麼問題又來了,如果我想先走介面中的方法,再走自己的方法怎麼辦???

4.1 那也很簡單,這時候只需要呼叫父類中的run方法即可;

那麼現在,不懂得小夥伴們,了解了嗎???

多執行緒面試題

題目 主線程執行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 ...

Java 執行緒面試題

子執行緒迴圈10次,接著主線程迴圈100次,接著又回到子執行緒迴圈10次,接著再回到主線程又迴圈100次,如此迴圈50次,請寫出程式。互斥實現了,就是交替執行弄不出來。子執行緒迴圈10次,接著主線程迴圈100次,接著又回到子執行緒迴圈10次,接著再回到主線程又迴圈100次,如此迴圈50次,請寫出程式...