`

关于Java多线程通过jni调用C方法的注意事项

    博客分类:
  • Java
 
阅读更多
JNI定义如下
package jni;   
public class Test {   
    public native void addOne();   
    public native int getGlobalValue();   
}  


JNI对应的C代码
#include"jni_Test.h"   
#include <stdio.h>   
int value = 1000;   
JNIEXPORT void JNICALL Java_jni_Test_addOne(JNIEnv *env, jobject obj)
{   
    value = value +1;   
}   
JNIEXPORT jint JNICALL Java_jni_Test_getGlobalValue(JNIEnv *env, jobject obj)   
{   
    return value;   
} 


创建多个线程操作全局变量
package jni;
public class MainCygwin {
    static{
        System.loadLibrary("test");
    }
    public static void main(String[] args) {
        Test hl = new Test();
        Thread t1 = new Thread(new Add("first",hl));
        Thread t2 = new Thread(new Add("second",hl));
        t1.start();
        t2.start();
    }
}
class Addimplements Runnable{
    private String name;
    private Test hl;   
    public Add(String name,Test hl)   
    {   
        this.name = name;
        this.hl = hl;   
    }   
    @Override  
    public void run() {   
        int i = 0;    
        while(i < 100)   
        {   
            i++;   
            h1.addOne(); 
            System.out.println(this.name + hl.getGlobalValue());
            try {   
                Thread.sleep(10);   
            } catch (InterruptedException e) {   
                e.printStackTrace();   
            }   
        }   
    } 
} 


两个加操作线程操作的是同一个value变量
分享到:
评论

相关推荐

    java 编程入门思考

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    java联想(中文)

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Java初学者入门教学

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    JAVA_Thinking in Java

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Thinking in Java简体中文(全)

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Thinking in Java 中文第四版+习题答案

    A.5.6 固有方法与程序片的注意事项 A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和 A.6.4 比较CORBA与 A.7 总结 附录B 对比C++和 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的...

    Think in Java(中文版)chm格式

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    ThinkInJava

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    thinkinjava

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    14.4 JNI调用Java方法的流程 486 第15章 Android性能优化 489 15.1 Android的性能优化方法 490 15.1.1 布局优化 490 15.1.2 绘制优化 493 15.1.3 内存泄露优化 493 15.1.4 响应速度优化和ANR日志分析 496 ...

    Android开发艺术探索

     14.4 JNI调用Java方法的流程 / 486  第15章 Android性能优化 / 489  15.1 Android的性能优化方法 / 490  15.1.1 布局优化 / 490  15.1.2 绘制优化 / 493  15.1.3 内存泄露优化 / 493  15.1.4 响应速度优化和...

    android开发艺术探索高清完整版PDF

    / 484 14.4 JNI调用Java方法的流程 / 486 第15章 Android性能优化 / 489 15.1 Android的性能优化方法 / 490 15.1.1 布局优化 / 490 15.1.2 绘制优化 / 493 15.1.3 内存泄露优化 / 493 15.1.4 响应速度优化和...

Global site tag (gtag.js) - Google Analytics