我需要幫助來獲得這個問題的答案:
問題問的是以下代碼的輸出是什么?
這個問題問的是以下代碼的輸出是什么?
package tryScope;
public class MyThread extends Thread{
public void run() {
System.out.println("MyThread: run()")。
}
public void start() {
System.out.println("MyThread: start()")。
}
}
class MyRunnable implements Runnable{
public void run() {
System.out.println("MyRunnable: run()")。
}
public void start() {
System.out.println("MyRunnable: start()")。
}
}
public class myTest {
public static void main(String[] args) {
MyThread myThread = new MyThread();
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
myThread.start();
}
因此,我應該選擇1個正確的答案,但我甚至無法使其運行。 我想驗證一下,問題所設定的代碼是否有問題?
這里有4個選擇:
- 印刷品:
請讓我知道哪個是正確的答案,以及代碼是否有問題。
謝謝。
uj5u.com熱心網友回復:
我認為這段代碼實在是太愚蠢了。輸出應該是"MyThread: start()",而不是別的。
這是因為在類MyThread中,start方法被覆寫了。所以根本就沒有執行緒啟動。你可以嘗試這樣修改方法:
public class MyThread extends Thread{
public void run() {
System.out.println("MyThread: run()"/span>)。
}
public void start() {
System.out.println("MyThread: start()"/span>)。
super.start()。
}
那么輸出結果應該是這樣的:"MyThread: start()"接著是"MyThread: run()"
要實作這一點。
MyThread: start() followed by MyRunnable:run()
在main-method中加入這一行:
myRunnable.run()
注意:你根本不應該覆寫Thread中的start方法,正如上文Hejday所提到的。該方法負責處理Thread的內部創建和啟動。然后,Thread將執行它的運行方法查看Thread.
。uj5u.com熱心網友回復:
我已經很久沒有回去研究這個問題了,但我相信我還記得他們可能想讓你從這個問題上知道什么。
至少有兩種方法,你可以用一些你希望運行的起始代碼創建和運行執行緒。
- 你可以讓你的類成為 Thread 的子類。 如果你選擇這種方式,你必須覆寫.run()方法,通常情況下,不應該亂用.start()方法。 .start()方法包含了一些有趣的系統代碼,你可能想在某一天看看,但這遠遠超出了執行緒的初級使用范圍。 真正的高級用戶有時可能有理由覆寫它,但其他人不應該。 除非它包含正確的代碼,否則你的執行緒子類將永遠不會真正啟動,而.run()方法將永遠不會在任何執行緒中執行。
為了啟動你的執行緒子類的實體,你呼叫它的.start()方法,你明智地沒有覆寫這個方法,因為它包含了棘手的、神奇的代碼,如果你看著它,你會感到困惑的。 你需要知道的是,這段代碼將在一個適當的新執行緒中運行你的 .run() 方法中的代碼,該執行緒是在你的建構式中創建的。
要以這種方式運行,請注釋掉MyThread類的.start()的不適當的覆寫
。現在,很多人會說,雖然這樣做是合法的,但除了在高級應用中你想真正改變執行緒的作業方式外,對Thread進行子類化真的很尷尬,很有局限性,也不是很好的風格,而大多數用戶甚至可能永遠不會學習或需要這樣做。
盡管如此,你還是應該知道上面描述的這種基本方法,因為你會在考試和其他人的代碼中看到它。
如果這是合法的,但不推薦,那么大多數人說你應該讓你的部分代碼在其他執行緒中運行,這是怎么回事呢?
- 使用庫中的基本執行緒類,將Runnable的一個實體傳遞給它。 在包含你希望運行的代碼的類中,完全不要派生/子類Thread。 只需實作Runnable介面并重寫.run()方法。 實作你自己的.start()方法沒有必要,也沒有意義,因為它不會被呼叫,問題似乎是想檢查你是否知道這一點。
MyRunnable myRunnable = new MyRunnable()。
Thread thread = new Thread(myRunnable);
thread.start()。
這個問題是怎么來的? 它確實測驗了堅實的基礎知識,但是通過放入你不應該寫的錯誤代碼,然后問會發生什么,這是一種有點混亂的教學方式,但在想確保你知道什么是什么的證書考試中是公平的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/325320.html
標籤:
