メインスレッドを新しいスレッドから生成し、しばらくしてから割り込みフラグを立てようとしています。その場合、生成されたスレッドはそのフラグを見て、それ自体を終了する必要があります。
メインスレッドは次のようになります。
final Thread t = new Thread()
{
@Override
public void run()
{
f();
}
};
t.start();
try
{
t.join(time);
t.interrupt();
if(t.isAlive())
{
t.join(allowance);
if(t.isAlive())
throw new Exception();
}
}
catch(Exception e)
{
System.err.println("f did not terminate in the alloted time");
}
そして、生成されたスレッドには、そのコード全体に散在する次の束があります。
if(Thread.interrupted()) return;
デバッグ モードにすると、すべてが完全に機能します。割り込みフラグはメイン スレッドによって発生し、生成されたスレッドによってキャッチされます。ただし、通常の実行モードでは、許可をどれだけ長く設定しても、生成されたスレッドは割り込みフラグを受信していないようです。
私が間違っていることを誰かが知っていますか?
注:私はUbuntuを使用していますが、Linuxはまったく初めてです。OSに問題がある可能性はありますか?他の OS でコードをテストしていません。