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

私のスレッドには、に基づいて実行される if else ステートメントがありますflag。ここで myflagは静的ではなく、プログラムの実行中に動的に変化します。値が変更されるたびflagに、if-else 条件をチェックする必要があります。my flagis がfalseelse部分を実行するとします。次に、私のflag変更trueは、else から出てきて if part を実行する必要があります。これはどのように実装できますか???

4

4 に答える 4

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 ..
    }
  }
}
于 2013-07-25T02:37:22.187 に答える
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 に答える
1

これがスレッドの問題である理由がわかりません。口頭での説明から、次のことをしたいようです。

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

フラグが である限り、最初のループが実行されますtrue。フラグが になるとすぐにfalse、最初のループが終了し、2 番目のループが開始されます。

于 2013-07-25T02:38:07.320 に答える
0
while(finished == false)
{
    if(flag == true)
    {
        while(flag == true  && finished == false)
        {
                //do if
        }
    }
    else
    {  
        while(flag == false && finished == false)
        {
            // do else
        }

    }
}

finishedbooleanスレッドを停止するように指示する別のものがあります。

于 2013-07-25T02:40:16.720 に答える