【问题标题】:Thread interrupt vs. JNI Function Call线程中断与 JNI 函数调用
【发布时间】:2011-06-16 20:55:25
【问题描述】:

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

Where to stop/destroy threads in Android Service class?

目前,我的线程基本上是获取时间,进行单个 Native Function 调用来更新游戏逻辑,然后在调整后的经过时间休眠。

我很好奇,因为我仍然对线程不是很满意,所以中断()杀死线程的速度有多快?如果在 Native Function 中运行的代码中间,会在中间停止,还是安全完成?

提前谢谢, 耶利米

【问题讨论】:

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


    【解决方案1】:

    不用担心,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
        }
    }
    

    更新:
    此外,文档指出:

    如果前面的条件都不成立,则设置该线程的中断状态。

    【讨论】:

    • 但是如果它没有被其中一种方法阻止,比如说调用本机方法......它会停止吗?
    • @Maximus,不,它不会停止...只设置了isInterrupted 状态,因此每次循环时都必须检查状态。
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2012-02-26
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多