2013-07-25 164 views
1
public void run() 
{ 
    if (flag) 
    { 
     infinite Loop... 
    } 
    else 
    { 
     infinite Loop... 
    } 
} 

在我的線程中有如果else語句執行基於flag。這裏我的flag不是靜態的,在執行程序時會動態變化。每當flag值更改時,我都希望檢查if-else條件。假設我的flagfalse它將執行else部分。現在我的flag更改爲true那麼它應該從其他部分出來並執行部分。這怎麼能實現?線程需要檢查是否連續

+0

帶'while'? – nachokk

+0

如果有無限循環,否則我該如何走出來?如果我出來,那麼只有我可以檢查條件.... – user1635256

+0

你可以在相關的部分插入一個'break'嗎? – icedwater

回答

3

如果一個線程在沒有任何退出條件的情況下進入一個無限循環,那麼除非強制中斷,否則無法使其更改其行爲。

既然你可以只移動if/else外:

public void run() { 
    while (!finished) { 
    if (flag) { 
     .. true loop iteration .. 
    } 
    else { 
     .. false loop iteration .. 
    } 
    } 
} 

記住,你想flagvolatile使線程可以使用它的最新值。另外,不能動態改變的變量是final,而不是static,它具有不同的含義。

如果你被迫分居無限循環只是放置一個條件有:

public void run() { 
    while (!finished) { 
    while (flag) { 
     .. true loop iteration .. 
    } 
    while (!flag) { 
     .. false loop iteration .. 
    } 
    } 
} 
1

我不知道爲什麼這是一個線程的問題。從你的口頭描述,這聽起來像你想這樣做:

while (true) { 
    while (flag) { 
     // first infinite loop body 
    } 
    while (!flag) { 
     // second infinite loop body 
    } 
} 

只要標誌true將執行第一個循環。一旦標誌變爲false,第一個循環將退出,第二個循環開始。

+1

保證在退出第一個循環後,在進入第二個循環之前'flag'沒有回到'true'? – Jack

+0

好點,@傑克。考慮到這些將是單獨的線程,這可能會很棘手。 – icedwater

+1

@傑克 - 好點!我誤解了原文。我更新了代碼以處理'flag'來回切換。當然,這是一種競爭條件,但如果它很重要,那麼OP需要的東西比簡單的標誌提供更多的控制。 –

0
while(finished == false) 
{ 
    if(flag == true) 
    { 
     while(flag == true && finished == false) 
     { 
       //do if 
     } 
    } 
    else 
    { 
     while(flag == false && finished == false) 
     { 
      // do else 
     } 

    } 
} 

finished是另一個boolean你必須告訴停止線程。

1
private boolean flag = true; 
    while (flag) 
{  // if true 
     //Statements executed for true 
     } 
    while (!flag) 
{ // if false 
     //Statements executed for false 
     }