「java钩子定理」java中的钩子函数

博主:adminadmin 2023-03-21 09:01:09 870

本篇文章给大家谈谈java钩子定理,以及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钩子定理的信息别忘了在本站进行查找喔。