简述

通常情况下,我们可以向应用程序注入一个或多个 Hook (钩子) 线程,这样,在程序即将退出的时候,也就是 JVM 程序即将退出的时候,Hook 线程就会被启动执行。

Hook 线程的应用场景

防止程序重复执行,具体实现可以在程序启动时,校验是否已经生成 lock 文件,如果已经生成,则退出程序,如果未生成,则生成 lock 文件,程序正常执行,最后再注入 Hook 线程,这样在 JVM 退出的时候,线程中再将 lock 文件删除掉;
(钩子) 线程以及应用场景
这种防止程序重复执行的策略,也被应用于 Mysql 服务器,zookeeper, kafka 等系统中。

注意事项

Hook 线程只有在正确接收到退出信号时,才能被正确执行,如果你是通过 kill -9这种方式,强制杀死的进程,那么抱歉,进程是不会去执行 Hook 线程的,为什么呢?你想啊,它自己都被强制干掉了,哪里还管的上别人呢?
请不要在 Hook 线程中执行一些耗时的操作,这样会导致程序长时间不能退出

参考

面试官: 什么是 Hook (钩子) 线程以及应用场景?

相关文章:

  • 2022-12-23
  • 2021-06-21
  • 2021-06-07
  • 2021-08-18
  • 2022-12-23
  • 2022-02-17
  • 2022-12-23
  • 2021-12-26
猜你喜欢
  • 2021-05-31
  • 2021-10-11
  • 2021-03-30
  • 2021-10-25
  • 2021-11-27
  • 2021-12-11
相关资源
相似解决方案