相关疑难解决方法(0)

将耗时的JNI任务作为线程调用

我在使用线程中的JNI调用本机函数时遇到了一个棘手的问题.

本机函数是执行计算密集型任务的遗留代码.由于我不想冻结程序的其余部分,因此应该在后台线程中执行计算.EventBus用于将计算结果发送回主程序.

基本上它应该很简单,像这样:

public class CalculationEngine {
  private CalculationEngine(){}

  public static void calculateInBackground(final Parameters parameters) {

    new Thread(new Runnable() {
      public void run() {
        // Someone might change the parameters while our thread is running, so:
        final Parameters clonedParameters = parameters.clone();
        Results results = new Results();
        natCalc(clonedParameters, results);
        EventBus.publish("Results", results);
      }
    }).start();

  }

  public static void calculateNormally(final Parameters parameters) {
    Results results = new Results();
    natCalc(parameters, results);
    EventBus.publish("Results", results);
  }

  private static native synchronized void
    natCalc(Parameters …
Run Code Online (Sandbox Code Playgroud)

java-native-interface multithreading

4
推荐指数
1
解决办法
5929
查看次数