小编典典

线程中断与JNI函数调用

java

我正在使用此处接受的答案中的方法来构造一个gameloop线程。

Android
Service类中的哪里停止/销毁线程?

此刻,我的线程基本上获取了时间,进行了一个本机功能调用,以更新游戏逻辑,然后在调整的经过时间之前进入睡眠状态。

令我好奇的是,由于我对Threads仍然不太满意,因此用interrupt()杀死Thread有多快?如果它在本机函数中运行的代码的中间,它将停止在其中,还是安全地完成?

提前谢谢耶利米


阅读 213

收藏
2020-11-26

共1个答案

小编典典

不用担心,文档interrupt指出

如果在调用Object类的wait(),wait(long)或wait(long,int)方法或join(),join(long),join(long,int)方法时阻塞了此线程,此类的sleep(long)或sleep(long,int)方法,则其中断状态将被清除,并将收到InterruptedException。

因此,只有InterruptedException在处于某种阻塞/睡眠/等待状态时,线程才会获取。如果您正在运行,则线程在进入这些状态之一之前不会获得异常。

您的循环应为:

while(!Thread.currentThread().isInterrupted()) // <- something of the sort here
{
    try{
        // do work
    } catch (InterruptedException e){
        // clean up
    }
}

更新:
此外,文档指出:

如果上述条件均不成立,则将设置该线程的中断状态。

2020-11-26