线程中断与JNI函数调用

时间:2011-06-16 20:55:25

标签: java android multithreading java-native-interface android-ndk

我正在使用此处接受的答案中的方法来构建游戏循环线程。

Where to stop/destroy threads in Android Service class?

目前,我的线程基本上得到时间,进行一次更新游戏逻辑的Native Function调用,然后按调整后的传递时间休眠。

我很好奇,因为我对Threads仍然不太满意,是用trunk()来杀死Thread的速度有多快?如果它位于Native Function中运行的代码的中间,它会在它的中间停止,还是会安全地完成?

提前谢谢, 耶

1 个答案:

答案 0 :(得分:3)

不用担心,documentation for interrupt says

  

如果在调用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
    }
}

<强>更新
此外,文档说明:

  

如果以前的条件都不成立,那么将设​​置该线程的中断状态。