原生代码使用 Java 线程
原生代码使用 Java 线程
1 /** 2 * Using Java based threads. 使用基于 Java 的线程 3 * 4 * @param threads thread count. 线程数 5 * @param iterations iteration count. 每个 worker 的迭代次数 6 */ 7 private void javaThreads(int threads, final int iterations) { 8 // Create a Java based thread for each worker 9 // 为每一个 worker 创建一个基于 Java 的线程 10 for (int i = 0; i < threads; i++) { 11 final int id = i; 12 13 Thread thread = new Thread() { 14 public void run() { 15 nativeWorker(id, iterations); 16 } 17 }; 18 19 thread.start(); 20 } 21 } 22 23 /** 24 * Starts the given number of threads for iterations. 启动给定数量的线程迭代 25 * 26 * @param threads thread count. 27 * @param iterations iteration count. 28 */ 29 private void startThreads(int threads, int iterations) { 30 // 原生代码使用 Java 线程 31 javaThreads(threads, iterations); 32 }
原生代码使用 Java 线程 优点:
1、更容易建立。
2、原生代码不要求做任何修改。
3、因为 Java 线程已经是 Java 平台的一部分,所以不要求显式地附着到虚拟机上。原生代码可以用提供的线程专用 JNIEnv 接口指针与 Java 代码通信。
4、通过 Java.lang.Thread 类提供的方法可以用于与 Java 代码中的线程实例无缝交互。
不足:
1、因为原生空间中没有创建 Java 线程的 API,所以假设为线程分配任务的逻辑是 Java 代码的一部分。
2、因为基于 Java 的线程对原生代码是透明的,所以假定原生代码是线程安全的。
3、原生代码不能获益于其他并发程序的概念或组件,例如信号量等,因为原生空间中没有可供 Java 线程使用的相应 API。
4、在不同的线程中运行的原生代码不能通信或直接共享资源。

浙公网安备 33010602011771号