「java钩子定理」java中的钩子函数
本篇文章给大家谈谈java钩子定理,以及java中的钩子函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何为JVM添加关闭钩子与简要分析
- 2、java中如何调用钩子函数
- 3、这几句java是什么意思
- 4、java中的闭包到底是什么意思啊???
- 5、java中何为钩子方法和回调函数
- 6、求助:java,怎样代码实现结束正在运行的程序?
如何为JVM添加关闭钩子与简要分析
最近在看当当开源的数据库分库分表框架Sharding-jdbc的源码,在看ExecutorEngine类时,遇到了很多没用过的JDK api,Sharding-jdbc内部大量的使用了google的工具包Guava。在ExecutorEngine类处理多线程问题部分也同样用到的Guava下面的util.concurrent包的类进处理。而我在看google的Guava的MoreExecutors时便遇到了Runtime.getRuntime().addShutdownHook(hook)。
1、JVM的关闭钩子
JVM的关闭钩子是通过Runtime#addShutdownHook(Thread hook)方法来实现的,根据api是注解可知所谓的 shutdown hook 就是一系例的已初始化但尚未执行的线程对象。
当准备JVM停止前,这些shutdown hook 线程会被执行。以下几种情况会使这个shutdown hook调用:
程序正常退出,这发生在最后的非守护线程退出时,或者在调用 exit(等同于System.exit)方法。
为响应用户中断而终止 虚拟机,如键入 ^C;或发生系统事件,比如用户注销或系统关闭。
注册jvm关闭钩子通过Runtime.addShutdownHook(),实际调用ApplicationShutdownHooks.add()。后者维护了一个钩子集合IdentityHashMapThread, Thread hooks。
java中如何调用钩子函数
JAVA是运行在虚拟机上的,而钩子函数是直接对操作系统进行操作控制的,这也是Java和C的主要区别之一,Java要实现钩子函数比较麻烦,需要使用JNI技术,就是Java本地接口,调用C写的钩子函数,所以你还有学会用C写一个钩子函数,然后再用Java的JNI调用C
这几句java是什么意思
空实现(钩子)。
具体行为延迟到子类实现,举个例子来说,我定义了鸭子的基类,并且定义鸭子会叫,但每种鸭子叫法不一样。比如有的鸭子呱呱的叫,有的鸭子吱吱的叫。因此定义一个空实现 ,由子类覆盖。这种过程叫挂钩。
java.awt和javax.swing大量的使用了钩子
java中的闭包到底是什么意思啊???
闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域,用过这个定义 可以看出内部类是面向对象的闭包 因为他不仅包含外围类对象的信息 还自动拥有一个指向此外围类对象的引用 在此作用域内 内部类有权操作所有的成员 包括private成员;interface Incrementable
{
void increment();
} class Callee1 implements Incrementable
{
private int i=0;
public void increment()
{
i++;
System.out.println(i);
}
}class MyIncrement
{
void increment()
{
System.out.println("other increment");
}
static void f(MyIncrement mi)
{
mi.increment();
}
}class Callee2 extends MyIncrement
{
private int i=0;
private void incr()
{
i++;
System.out.println(i);
}
private class Closure implements Incrementable
{
public void increment()
{
incr();
}
}
Incrementable getCallbackReference()
{
return new Closure();
}
}
class Caller
{
private Incrementable callbackRefference;
Caller(Incrementable cbh)
{
callbackRefference = cbh;
}
void go()
{
callbackRefference.increment();
}
}public class Callbacks
{
public static void main(String [] args)
{
Callee1 c1=new Callee1();
Callee2 c2=new Callee2();
MyIncrement.f(c2);
Caller caller1 =new Caller(c1);
Caller caller2=new Caller(c2.getCallbackReference());
caller1.go();
caller1.go();
caller2.go();
caller2.go();
}
}输出other increment
1
2
1
2Callee2继承字MyIncrement 后者已经有一个不同的increment()方法并且与Incrementable接口期望的increment()方法完全不相关 所以如果Callee2继承了MyIncrement就不能为了Incrementable的用途而覆盖increment()方法 于是这能使用内部类独立的实现Incrementable内部类Closure实现了Incrementable 一提供一个放回Caller2的钩子 而且是一个安全的钩子 无论谁获得此Incrementbale的引用 都只能调用increment() 除此之外没有其他功能
java中何为钩子方法和回调函数
问得不清楚,所以不懂怎么回答这个区别。
所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数。
例子:
void CALLBACK fun(){...} 这是一个函数,回调函数
void AAA(int a, Fun* p); 这是一个普通函数,但第二个参数是fun
AAA(5, fun);
求助:java,怎样代码实现结束正在运行的程序?
1.
public class TestShutDownHook {
2.
public TestShutDownHook() {
3.
doShutDownWork();
4.
}
5.
private void doShutDownWork() {
6.
Runtime run=Runtime.getRuntime();//当前 Java 应用程序相关的运行时对象。
7.
run.addShutdownHook(new Thread(){ //注册新的虚拟机来关闭钩子
8.
@Override
9.
public void run() {
10.
//程序结束时进行的操作
11.
System.out.println("程序结束调用");
12.
}
13.
});
14.
}
15.
public static void main(String[] args) {
16.
new TestShutDownHook();
17.
for (int i = 0; i 1000; i++) { // 在这里增添您需要处理代码 }
18.
System.out.println(i);
19.
}
20.
}
21.
}
java钩子定理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中的钩子函数、java钩子定理的信息别忘了在本站进行查找喔。