原生代码使用 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、在不同的线程中运行的原生代码不能通信或直接共享资源。

 

posted @ 2015-07-06 15:18  壬子木  阅读(140)  评论(0)    收藏  举报