我试图让我的主线程产生一个新线程,并在一段时间后提高中断标志。当它这样做时,生成的线程应该看到该标志并终止自身。
主线程看起来像这样:
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 完全陌生。问题可能出在操作系统上吗?我尚未在任何其他操作系统上测试过该代码。
这是我的猜测:
- 当主线程调用时
t.interrupt();
t 线程已经完成执行。
- 当主线程调用时
t.interrupt();
在 t 线程中没有更多的调用来检查interrupted()
flag.
- 运行代码后会出现异常吗?您是否在“允许”时间后收到在代码中抛出的异常,或者您得到了其他类似的异常
ThreadInterruptedException
或类似的?尝试编写捕获的异常的消息......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)