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

服務(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毛片免费观看完整 | 久久精品在现线观看免费15 | 美女下面揉出水免费视频 | 亚洲精品中文字幕久久久久久 | 国产专区日韩精品欧美色 | 免费一级日本c片完整版 | 都市风流贵妇激情 | 亚洲欧美日韩天堂在线观看 | 亚洲第一在线播放 | 18日本xxxxxxⅹxx96 | 欧美成人aa| 精品一二三区久久AAA片 | 国产伦码精品一区二区三区 | 丝瓜视频在线观看污 | 9久re在线观看视频精品 | 男女男精品视频网站 | 四虎影院新地址 | 日本在线播放视频 | 精品欧美一区二区精品久久 | 小莹的性荡生活45章 | ts人妖另类国产 | zoofilivideo杂交3d | 久久久精品日本一区二区三区 | 黄瓜视频黄 | 亚洲国产精品久久久久 | 视频高h| 男人与禽交的方法 | 三级欧美在线 | 男人天堂久久 | 国产欧美视频高清va在线观看 | jk制服喷水| 国产亚洲玖玖玖在线观看 | 亚洲第一男人天堂 | 国产rpg迷雾之风冷狐破解 | 亚洲电影第1页 | 国产高清不卡视频在线播放 |