
正文
java的回调方式代码 java的回调方式代码是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何在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。
相关问答
Q1: 给个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.
Q2: java回调函数问题?
下面使用java回调函数来实现一个测试函数运行时间的工具类:如果我们要测试一个类的方法的执行时间,通常我们会这样做:java 代码public class TestObject {/*** 一个用来被测试的方法,进行了一个比较耗时的循环*/public static void testMethod(){for ( int i= 0 ; i 100000000 ; i++){}}/*** 一个简单的测试方法执行时间的方法*/public void testTime(){long begin = System.currentTimeMillis(); //测试起始时间testMethod(); //测试方法long end = System.currentTimeMillis(); //测试结束时间System.out.println("[use time]:" + (end - begin)); //打印使用时间}public static void main(String[] args) {TestObject test=new TestObject();test.testTime();}}大家看到了testTime()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:首先定一个回调接口:java 代码public interface CallBack {//执行回调操作的方法void execute();}然后再写一个工具类:java 代码public class Tools {/*** 测试函数使用时间,通过定义CallBack接口的execute方法* @param callBack*/public void testTime(CallBack callBack) {long begin = System.currentTimeMillis(); //测试起始时间callBack.execute(); ///进行回调操作long end = System.currentTimeMillis(); //测试结束时间System.out.println("[use time]:" + (end - begin)); //打印使用时间}public static void main(String[] args) {Tools tool = new Tools();tool.testTime(new CallBack(){//定义execute方法public void execute(){//这里可以加放一个或多个要测试运行时间的方法TestObject.testMethod();}});}}大家看到,testTime()传入定义callback接口的execute()方法就可以实现回调功能
java的回调方式代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java的回调方式代码是什么、java的回调方式代码的信息别忘了在本站进行查找喔。






