public void run()
{
if (flag)
{
infinite Loop...
}
else
{
infinite Loop...
}
}
在我的主题中,有if语句基于flag
执行。这里我的flag
不是静态的,并且在执行程序时会动态变化。每次flag
值更改时,我都希望检查if-else条件。假设我的flag
为false
,它将执行else部分。现在我的flag
更改为true
,然后它应该从其他地方出来并在部分执行时执行。如何实施???
答案 0 :(得分:3)
如果一个线程在没有任何退出条件的情况下进入无限循环,那么除非你强行中断,否则你无法让它改变它的行为。
鉴于您可以将if/else
移到外面:
public void run() {
while (!finished) {
if (flag) {
.. true loop iteration ..
}
else {
.. false loop iteration ..
}
}
}
请注意,您希望flag
为volatile
,以便线程可以使用其最新值。此外,无法动态更改的变量为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
,它告诉你停止线程。