如何在native代码里面回调java中的方法这是一个C中获得虚拟机的example,是在JDK 1.1中实现的,现在已经跑不通了,经供参考,但是里面得到虚拟机原理是一样的 。
它用到了3个方法: Create VM,Attaching VM,Unloading VM.
JNI_CreateJavaVM() 方法用来加载和初始化一个java虚拟机并且返回JNI接口的指针(JNIEnv), 这个线程被看做是主线程 。
JNIEnv是在当前线程中是合法的,如果其他的线程去访问java虚拟机,他必须调用一下AttachCurrentThread()方法,把自己附属到VM中才能获得JNIEnv 。一旦调用成功,native的线程就像一个普通的java线程运行在native的线程中(native中的线程都是Linux线程,由内核调用执行) 。native线程仍然连接到VM,直到它调用DetachCurrentThread()来分离 。
主线程不能从VM中分离自己,必须调用DestroyJavaVM()方法去卸载整个VM 。
给个Java接口回调的例子接口回调是指:可以把使用某一接口java的回调方式代码的类创建的对象的引用赋给该接口声明的接口变量java的回调方式代码,那么该接口变量就可以调用被类实现的接口的方法 。实际上java的回调方式代码,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法 , 这一过程称为对象功能的接口回调 。
示例代码:
interface People{//接口
void peopleList();
}
class Student implements People{//接口实现类
public void peopleList(){//实现接口方法
System.out.println("I'm a student.");
}
}
class Teacher implements People{//接口实现类
public void peopleList(){//实现接口方法
System.out.println("I'm a teacher.");
}
}
public class Example{
public static void main(String args[]){
People a;//声明接口变量
a=new Student();//实例化,接口变量中存放对象的引用
a.peopleList();//接口回调
a=new Teacher();//实例化,接口变量中存放对象的引用
a.peopleList();//接口回调
}
}
输出结果:
I’m a student.
I’m a teacher.
java回调函数问题?下面使用java回调函数来实现一个测试函数运行时间的工具类:如果我们要测试一个类的方法的执行时间,通常我们会这样做:java 代码publicclassTestObject {/*** 一个用来被测试的方法,进行了一个比较耗时的循环*/publicstaticvoidtestMethod(){for ( inti= 0 ; i 100000000 ; i){}}/*** 一个简单的测试方法执行时间的方法*/publicvoidtestTime(){longbegin = System.currentTimeMillis(); //测试起始时间testMethod(); //测试方法longend = System.currentTimeMillis(); //测试结束时间System.out.println("[use time]:"(end - begin)); //打印使用时间}publicstaticvoidmain(String[] args) {TestObject test=newTestObject();test.testTime();}}大家看到了testTime()方法,就只有"//测试方法"是需要改变的 , 下面我们来做一个函数实现相同功能但更灵活:首先定一个回调接口:java 代码publicinterfaceCallBack {//执行回调操作的方法voidexecute();}然后再写一个工具类:java 代码publicclassTools {/*** 测试函数使用时间,通过定义CallBack接口的execute方法* @param callBack*/publicvoidtestTime(CallBack callBack) {longbegin = System.currentTimeMillis(); //测试起始时间callBack.execute(); ///进行回调操作longend = System.currentTimeMillis(); //测试结束时间System.out.println("[use time]:"(end - begin)); //打印使用时间}publicstaticvoidmain(String[] args) {Tools tool = newTools();tool.testTime(newCallBack(){//定义execute方法publicvoidexecute(){//这里可以加放一个或多个要测试运行时间的方法TestObject.testMethod();}});}}大家看到,testTime()传入定义callback接口的execute()方法就可以实现回调功能
【java的回调方式代码 java的回调方式代码是什么】java的回调方式代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java的回调方式代码是什么、java的回调方式代码的信息别忘了在本站进行查找喔 。
推荐阅读
- 如何推送新媒体检查,新媒体广告如何推送
- 微信视频号点赞时间,微信视频号点赞时间会延迟吗
- mysql怎么查看名 怎么查看mysql数据库的名字
- 重看以前的电视成语怎么说,看以前的电视剧说说
- linux界面查询命令符,linux查看命令用法
- java直接排序算法代码 java直接排序算法代码是什么
- html服务端js调用EXE的简单介绍
- ppt字如何分解,ppt怎么把字拆开
- 包含html5怎么注视的词条