在以下代碼中,如果我在循環內部使用sysout語句,那麼代碼將在條件滿足時執行並進入循環,但如果我不在內部使用sysout語句然後循環然後無限循環繼續而不進入if條件,即使if條件滿足..任何人都可以請幫我找出確切的原因。只是一個sysout語句使if條件成爲true。爲什麼這樣?由於system.out.println語句導致運行線程延遲
的代碼如下: -
class RunnableDemo implements Runnable {
private Thread t;
private String threadName;
RunnableDemo(String name){
threadName = name;
System.out.println("Creating " + threadName);
}
public void run() {
System.out.println("Running " + threadName);
for(;;)
{
//Output 1: without this sysout statement.
//Output 2: After uncommenting this sysout statement
//System.out.println(Thread.currentThread().isInterrupted());
if(TestThread.i>3)
{
try {
for(int j = 4; j > 0; j--) {
System.out.println("Thread: " + threadName + ", " + j);
}
} catch (Exception e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
}
}
public void start()
{
System.out.println("Starting " + threadName);
if (t == null)
{
t = new Thread (this, threadName);
t.start();
}
}
}
public class TestThread {
static int i=0;
public static void main(String args[]) {
RunnableDemo R1 = new RunnableDemo("Thread-1");
R1.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i+=4;
System.out.println(i);
}
}
沒有系統輸出語句在無限循環輸出: - enter image description here
輸出與系統輸出語句在無限循環: - enter image description here
我也會想你正在運行成揮發性的問題。嘗試製作 static int i = 0; static volatile int i = 0;如果現在的行爲與生病相同,則用解釋提出答案。 –
@Aaron它是一個無限循環,所以他們不斷地執行它,正確...?編輯:亞倫離開大樓。 –
@亨克德波爾,我嘗試使用易失性,它工作正常。但是,你能解釋一下sysout語句做了哪些改變,即使沒有使用volatile關鍵字,代碼也能工作。 –