多线程Java JNI应用程序:C ++端是否充当单线程应用程序?

时间:2016-01-08 20:24:55

标签: java multithreading java-native-interface

给定一个用C ++编写的Solver,以及一个通过JNI加载求解器实例的java类:

SolverLoader loader=SolverLoader.getInstance();

Solver solver=loader.getNewSolver();
solver.solve(...);

SolverLoader是一个单例类,可根据请求加载和返回Solver的实例。它本质上是一个对象工厂。每次调用getNewSolver()函数时,SolverLoader都会通过JNI在C ++端创建一个求解器的新实例,并将一个句柄传递回java端。这很方便,因为这允许我在java端有多个求解器:每个java侧求解器都维护一个C ++端唯一求解器实例的句柄。

简而言之,我可以这样做:

Solver solver1 = loader.getNewSolver(); solver1.solve(...);

Solver solver2 = loader.getNewSolver(); solver2.solve(...);

这些解算器中的每一个都具有完全分离的数据结构,因为C ++求解器实例之间没有重叠。

现在我想做的是并行调用“solver1.solve(...)”和“solver2.solve(...)”,即在单独的java线程中启动它们。我想知道这是否也能在C ++方面按预期工作。我应该对C ++端的多个线程做些什么吗?我担心即使在Java方面一切都是多线程的,在C ++方面它会像单线程应用程序一样,当solver2处于活动状态时solver1暂停,反之亦然?

0 个答案:

没有答案