1
public void run()
{
    if (flag)
    {
        infinite Loop... 
    }   
    else
    {
        infinite Loop... 
    }   
}

在我的线程中有 if else 语句基于flag. 这里 myflag不是静态的,并且在执行程序时会动态变化。每次flag值更改时,我都希望检查 if-else 条件。假设我flag的 isfalse它将执行 else 部分。现在我flagtruethen 的更改应该来自 else 并执行 if 部分。这怎么可能实现???

4

4 回答 4

3

如果一个线程在没有任何退出条件的情况下进入无限循环,那么除非你强制中断它,否则你无法让它改变它的行为。

鉴于您可以移动if/else外部:

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

请注意,您希望线程flag可以volatile使用其最新值。此外,不能动态改变的变量是final, not static,它们的含义不同。

如果您被迫分离无限循环,只需在其中放置一个条件:

public void run() {
  while (!finished) {
    while (flag) {
      .. true loop iteration ..
    }
    while (!flag) {
      .. false loop iteration ..
    }
  }
}
于 2013-07-25T02:37:22.187 回答
1

我不确定为什么这是一个线程问题。根据您的口头描述,听起来您想这样做:

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

只要标志为 ,它将执行第一个循环true。一旦标志变为false,第一个循环将退出,第二个循环将开始。

于 2013-07-25T02:38:07.320 回答
1
private boolean flag = true; 
    while (flag) 
{       // if true
         //Statements executed for true
        }
    while (!flag) 
{   // if false
        //Statements executed for false
        }
于 2013-07-25T02:48:41.413 回答
0
while(finished == false)
{
    if(flag == true)
    {
        while(flag == true  && finished == false)
        {
                //do if
        }
    }
    else
    {  
        while(flag == false && finished == false)
        {
            // do else
        }

    }
}

finished是另一个boolean你告诉停止线程。

于 2013-07-25T02:40:16.720 回答