2013-07-25 109 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 
     }