以下代碼正常工作,即打印Hello!
,直到我按enter
。當我按下輸入鍵時,它停止。如預期的那樣,這很好。線程基礎知識:爲什麼相同的代碼在不同的類中產生不同的輸出?
但是,當我的相同的代碼複製到名爲OneDataCached
另一個類(所以它是不同的權只是類的名稱),它並不會達到預期效果。它,而打印Hello!
,當我按下enter
,它忽略了一個線,然後再次開始打印hello!
我感到困惑,爲什麼發生這種情況,任何提示或指針將不勝感激。
public class One {
static volatile boolean bool=true;
void stopThread(){
bool=false;
}
public static void main(String [] args){
new Thread(new Runnable() {
public void run(){
while(bool){
System.out.println("Hello!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
System.out.println("Press Return to stop ...");
new Scanner(System.in).nextLine();
new One().stopThread();
}
}
複製後的代碼OneDateCached CLASS: -
編輯: -
public class OneDataCached {
static volatile boolean bool=true;
void stopThread(){
OneDataCached.bool=false;
}
public static void main(String [] args){
new Thread(new Runnable() {
public void run(){
while(OneDataCached.bool){
System.out.println("Hello!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
System.out.println("Press Return to stop ...");
new Scanner(System.in).nextLine();
new One().stopThread();
}
}
您是否使用'OneDataCached.bool'或'One.bool'? '靜態'這種方式很有趣 – MadProgrammer
不同的'布爾'。 –
@MadProgrammer爲了檢查,我改變了'while'循環的條件以及'stopThread()'中的'bool'到'OneDataCached.bool';但是這沒有幫助。雖然我認爲你的觀點非常合理。我編輯了這個問題。 – Solace