gpt4 book ai didi

java - Java 中的线程

转载 作者:行者123 更新时间:2023-11-30 07:39:16 25 4
gpt4 key购买 nike

我正在尝试让我的主线程产生一个新线程,并在一段时间后提升中断标志。当它这样做时,生成的线程应该看到该标志并自行终止。

主线程看起来像这样:

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;

当我处于 Debug模式时,一切正常。中断标志由主线程引发并由派生线程捕获。但是,在常规运行模式下,生成的线程似乎没有收到中断标志,无论我设置了多长时间的限额。

有人知道我做错了什么吗?

注意:我使用的是 Ubuntu,而且我对任何 Linux 都是新手。问题可能出在操作系统上吗?我没有在任何其他操作系统上测试代码。

最佳答案

这是我的猜测:

  • 当主线程调用t.interrupt();时,t线程已经执行完毕。
  • 当主线程在 t 线程中调用 t.interrupt(); 时,不再调用检查 interrupted() 标志。
  • 运行代码后出现异常?您是否在“允许”时间后在代码中抛出异常,或者您是否遇到了其他类似 ThreadInterruptedException 或类似的异常?尝试编写捕获异常的消息...

关于java - Java 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com