一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 關(guān)于Kill指令停掉Java程序的問(wèn)題

關(guān)于Kill指令停掉Java程序的問(wèn)題

2022-02-24 12:14Jack魏 Java教程

這篇文章主要介紹了Kill指令停掉Java程序的思考,主要探究kill指令和java的關(guān)閉鉤子的問(wèn)題,需要的朋友可以參考下

今天同事問(wèn)我,一個(gè)jar包,啟動(dòng)起來(lái),端口正常,而且防火墻全都關(guān)閉了,為什么前臺(tái)訪問(wèn)出錯(cuò)?
我第一反應(yīng)是啟動(dòng)是否正常,然后就是阿里云安全組有沒(méi)有配置對(duì)應(yīng)的端口。
后來(lái)發(fā)現(xiàn)自己也不對(duì),是因?yàn)閗ill -9的問(wèn)題,所以本文就是來(lái)探究kill指令和java的關(guān)閉鉤子

 

1. Java的原生關(guān)閉鉤子

直接使用這個(gè),不管使用什么方式停止程序,都不會(huì)調(diào)用關(guān)閉鉤子,
不知道自己哪里出錯(cuò),希望大佬指正。

public class RunTest {
  public static void main(String[] args) throws InterruptedException {
     int i = 1;
      while (i<10000) {
          System.out.println(i);
          i++;
          Thread.sleep(1000);
      }

      Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
          @Override
          public void run() {
              System.out.println("I'll be back");
          }
      }));
  }
}

1.1 使用IDE關(guān)閉調(diào)試

可以看到,我用IDE點(diǎn)擊運(yùn)行,然后關(guān)閉,就直接停止了,沒(méi)有調(diào)用關(guān)閉鉤子。

關(guān)于Kill指令停掉Java程序的問(wèn)題

1.2 使用kill -15 指令

關(guān)于Kill指令停掉Java程序的問(wèn)題
關(guān)于Kill指令停掉Java程序的問(wèn)題
關(guān)于Kill指令停掉Java程序的問(wèn)題

1.3 使用kill -9 指令

關(guān)于Kill指令停掉Java程序的問(wèn)題

關(guān)于Kill指令停掉Java程序的問(wèn)題

終于有位大佬提出了質(zhì)疑,
說(shuō)需要把關(guān)閉鉤子注冊(cè)方法寫到while循環(huán)上面,
這樣才能注冊(cè)成功,于是我就試了一下,
事就這樣成了。
感謝 a塵 博主的指導(dǎo)。

修改后代碼:

public class RunTest {
  public static void main(String[] args) throws InterruptedException {

     Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
          @Override
          public void run() {
              System.out.println("I'll be back");
          }
      }));
      
     int i = 1;
      while (i<10000) {
          System.out.println(i);
          i++;
          Thread.sleep(1000);
      }
  }
}

這時(shí)候用IDE測(cè)試,用debug模式停止是正常的:

關(guān)于Kill指令停掉Java程序的問(wèn)題

在linux環(huán)境,使用kill -15:

關(guān)于Kill指令停掉Java程序的問(wèn)題

在linux環(huán)境,使用kill -9:

關(guān)于Kill指令停掉Java程序的問(wèn)題

 

2. SpringBoot關(guān)閉鉤子

測(cè)試jar包下載地址:
關(guān)閉鉤子測(cè)試jar包

import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class ApplicationListens implements CommandLineRunner, DisposableBean {
  @Override
  public void destroy() throws Exception {
      System.out.println("銷毀程序------");
  }

  @Override
  public void run(String... args) throws Exception {
      System.out.println("運(yùn)行程序------");
  }
}

2.1 使用IDE關(guān)閉

關(guān)于Kill指令停掉Java程序的問(wèn)題

2.2 使用kill -15 指令

關(guān)于Kill指令停掉Java程序的問(wèn)題

2.3 使用kill -9 指令

關(guān)于Kill指令停掉Java程序的問(wèn)題

所以,如果想優(yōu)雅的關(guān)閉應(yīng)用,需要用kill -15 ,
但是有時(shí)候我們會(huì)遇到關(guān)閉掉的情況,
那只能用kill -9

參考文獻(xiàn):
SpringBoot-監(jiān)聽?wèi)?yīng)用啟動(dòng)與關(guān)閉的回調(diào)鉤子

到此這篇關(guān)于Kill指令停掉Java程序的思考的文章就介紹到這了,更多相關(guān)Kill指令停掉Java程序內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/WeiHao0240/article/details/120849403

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产日产精品久久久久快鸭 | 色综合中文字幕天天在线 | 欧美a级在线观看 | 女张腿男人桶羞羞漫画 | 日本一区二区三区四区无限 | 国产精品高清一区二区三区 | 国产午夜免费秋霞影院 | 护士让我吃奶我扒她奶 | 欧美日韩国产精品综合 | 日韩一区二区三区四区五区 | 99视频观看 | 青青草人人 | 日韩成本大片35分钟免费播放 | caoporn草棚在线视频 | 99视频久久 | 国内精品久久久久久久久久久久 | 色色色资源站 | 91欧美秘密入口 | 王小军怎么了最新消息 | 欧美日韩一区二区中文字幕视频 | 精品人人做人人爽久久久 | 91高清免费国产自产 | 日韩高清一区二区 | 99国产自偷色久 | 视频免费观看在线播放高清 | 99在线精品视频 | gay勾搭直男com | 特级一级全黄毛片免费 | 午夜国产精品视频在线 | 国产区香蕉精品系列在线观看不卡 | 日本在线观看视频网站 | 天天草人人草 | 日本最新伦中文字幕 | 手机看片国产自拍 | 欧美特一级 | 2015小明台湾永久区域免费 | 亚洲国产香蕉视频欧美 | 俄罗斯妈妈k8影院在线观看 | 午夜国产精品 | 2021国产麻豆剧传媒剧情 | 天堂一区二区在线观看 |