java - Java 中的线程

标签 java multithreading interrupt

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

主线程看起来像这样:

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/

相关文章:

java - 在java中查找两个集合中的唯一点和公共(public)点,而不使用任何集合、列表等

java - Handler().postDelayed() 在方向改变时发送多个 Intent

c# - 如何实现TPL在1分钟延迟后运行进程?

c - 我如何将指向队列的指针作为 pthread_create 中的参数传递(收到不兼容的转换警告)?

python - 线程化快速创建大量图表

python - 如何制作即使在 Python 中引发异常的情况下也能解锁的目录锁

java - JFrame - Action 监听器

java - 我们如何为树查看器创建子上下文菜单

中断合并

c - ATmega328p,定时器0中断