我们怎么应该立即取消一些艰巨的任务?

时间:2018-06-02 16:05:37

标签: java android

我们如何取消一些艰巨的任务(在执行时)?

例如在Android中我创建Thread并在run方法中调用本机方法

public class HardTask extends Thread {

    public void run() {
        // here I call a native method (using JNI, C/C++ function, .so lib)
        // and its execution takes quite a lot of time, 5-40 seconds
        nativeMethod(some parameters);
    }
}

如果我需要在执行时取消执行此方法,例如,该怎么办?之前我可以再次使用这个方法我如何等到它完成否则如果我启动另一个线程并运行此方法而第一个仍在执行时我会得到一个本机错误(类似A/libc: Fatal signal 11 (SIGSEGV))当然会导致应用崩溃

这是2018年,除了已弃用的Thread.stop()方法

之外别无选择

我们所能做的就是在每行代码之后或在while(isRunning)之后检查一些布尔while(isRunning),它只允许你在某行之后停止并且该行仍然可以执行5-40秒,我们只是等到它完成......

1 个答案:

答案 0 :(得分:0)

您不需要管理某些变量,例如isRunning。您所要做的就是对线程进行锁定,这样一次只有一个实例可以运行该线程。在您的代码中,您可以执行此操作:

public void run() {
synchronized(this) {
        // here I call a native method (using JNI, C/C++ function, .so lib)
        // and its execution takes quite a lot of time, 5-40 seconds
        nativeMethod(some parameters);
}
    }

将代码放在synchronized块下。驻留在同步块中的代码只能由一个线程一次执行。一旦第一个线程执行该块,其他人就可以开始执行该块。