线程需要连续检查是否

时间:2013-07-25 02:32:26

标签: java multithreading

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

在我的主题中,有if语句基于flag执行。这里我的flag不是静态的,并且在执行程序时会动态变化。每次flag值更改时,我都希望检查if-else条件。假设我的flagfalse,它将执行else部分。现在我的flag更改为true,然后它应该从其他地方出来并在部分执行时执行。如何实施???

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

    }
}

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