Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >system.exit(0)和system.exit(1)区别

system.exit(0)和system.exit(1)区别

作者头像
用户7886150
修改于 2020-12-15 02:37:04
修改于 2020-12-15 02:37:04
1.5K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Java中的System.exit()

1、查看java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下: 

/**

     * Terminates the currently running Java Virtual Machine. The

     * argument serves as a status code; by convention, a nonzero status

     * code indicates abnormal termination.

     * <p>

     * This method calls the <code>exit</code> method in class

     * <code>Runtime</code>. This method never returns normally.

     * <p>

     * The call <code>System.exit(n)</code> is effectively equivalent to

     * the call:

     * <blockquote><pre>

     * Runtime.getRuntime().exit(n)

     * </pre></blockquote>

     *

     * @param      status   exit status.

     * @throws  SecurityException

     *        if a security manager exists and its <code>checkExit</code>

     *        method doesn't allow exit with the specified status.

     * @see        java.lang.Runtime#exit(int)

     */

    public static void exit(int status) {

    Runtime.getRuntime().exit(status);

    }

注释中说的很清楚,这个方法是用来结束当前正在运行中的java虚拟机

如果status==0,表示jvm正常退出,如果status!=0非零,表示jvm非正常退出。

关于System.exit(int status)方法

System.exit(int status);//这个语句的功能是结束当前运行的Java虚拟机,其中的参数status是状态代码,当status不为0时表示这次结束Java虚拟机是一个不正常的结束,这个数是返回给操作系统的。一般在Windows底下,不正常退出状态码为-1,这里可写为System.exit(-1); 

System.exit(int status)方法效果等同于于Runtime.getRuntime().exit(int n)方法 

特殊案例分析:在main方法中,启动一个自定义线程,并执行system.exit方法 

自定义线程代码: 

package com.java.demo;

public class Calculator implements Runnable {

    private int number;

    public Calculator(int number) {

        this.number = number;

    }

    @Override

    public void run() {

        for (int i = 1; i <= 10; i++) {

            System.out.printf("%s: %d * %d = %d\n", Thread.currentThread().getName(), number, i, i * number);

        }

    }

}测试方法:

package com.java.demo;

public class Main {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

            Calculator calculator = new Calculator(1);

            Thread thread = new Thread(calculator);

            thread.start();       //启动自定义线程

            System.out.println("hello world-----1");

            System.exit(0);  //执行jvm 退出

            System.out.println("hello world------2");

    }

}

 结果展示:

结果分析:我们在main方法启动一个自定义的线程,但是控制台只是输出了一个字符串“hello word--------1”.但是自定义线程中的run()方法输出的内容没有打印。以下是我根据程序执行结果,描绘的程序执行图: 

留个思考问题:如果在线程销毁方法中调用jvm退出方法,那我们的执行结果会发生怎么样的改变?

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java的System.exit()详解
说到 java.lang.System.exit() 这个方法,咱们先看下 JDK8 的 API 中怎么说
bboy枫亭
2020/09/22
7.1K0
Java的System.exit()详解
JVM笔记 -- JVM的生命周期介绍
Java虚拟机的启动时通过引导加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由Java虚拟机的具体实现指定的。
秦怀杂货店
2021/03/09
5130
探秘Java Runtime类:深入了解JVM运行时环境,有两下子!
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/07/05
6120
探秘Java Runtime类:深入了解JVM运行时环境,有两下子!
Java 的 finally 代码块的代码一定会执行吗?
对于很多初学者而言,会想当然地认为 “finally 代码块一定会被执行”,因此我们可以看下面这个案例:
明明如月学长
2021/08/31
4920
JVM关闭前做点什么
今天学到了一个非常有趣的API:java.lang.Runtime#addShutdownHook,顾名思义,就是JVM shutdown的钩子,当JVM关闭时触发的。addShutdownHook 方法是 java.lang.Runtime 类提供的一个方法,用于注册在Java虚拟机即将关闭时执行的代码块(也称为“钩子”或“hook”)。这个代码块会在程序终止之前被执行,无论是正常终止还是由于异常终止。
FunTester
2023/09/10
2610
JVM关闭前做点什么
聊聊flink taskmanager的jvm-exit-on-oom配置
本文主要研究一下flink taskmanager的jvm-exit-on-oom配置
code4it
2019/02/23
1.3K0
聊聊flink taskmanager的jvm-exit-on-oom配置
源码分析 - JVM关闭钩子的注册和调用
JAVA程序运行在虚拟机上(JVM),JAVA程序执行完成,JVM也随之关闭。关闭的方式有多种,根据其行为的文明程度可大概分为两种:
acupt
2019/08/26
1K0
java小知识-ShutdownHook(优雅关闭)
java里有个方法Runtime.getRuntime# addShutdownHook,是否了解呢?
爬格子PA
2024/12/23
3540
Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
我们发现这样效率太慢了,于是我们发现一个数的因子在平方根的左边,于是我们可以从左边遍历,这样可以节省时间
钮祜禄.爱因斯晨
2025/07/20
770
Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
Java虚拟机System.gc()解析
对于Java语言来说是不用刻意手动去释放内存,同时,也尽可能不需要手动去干预Java虚拟机的GC行为。在本篇文章中,我们试图从多个方面去解析有关System.gc()API调用的最常见问题。希望对需要了解这块技术的朋友有所帮助。
Luga Lee
2021/12/09
8890
Java虚拟机System.gc()解析
高并发编程-Runtime.getRuntime().addShutdownHook为自己的应用添加hook
一句话概括就是: ShutdownHook允许开发人员在JVM关闭时执行相关的代码。
小小工匠
2021/08/17
7920
如何优雅实现优雅停机?
其实优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。
Bug开发工程师
2018/12/10
2.1K0
如何优雅实现优雅停机?
哦,这就是java的优雅停机?(实现及原理)
其实优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。
用户1655470
2018/12/06
2.1K0
哦,这就是java的优雅停机?(实现及原理)
Java - 探究Java优雅退出的两种机制
在Linux上通过kill -9 pid方式强制终止进程的副作用,这种方式虽然简单高效,但也会带来一些问题,特别是对于应用软件而言。这些问题包括但不限于:
小小工匠
2024/05/26
7680
Java - 探究Java优雅退出的两种机制
Tomcat源码解析(二): Bootstrap和Catalina
ps:对于非正常方式退出Java虚拟机,例如杀进程,系统断电等,这些情况下,shutdownHook不会被执行
Java微观世界
2025/01/21
1830
Tomcat源码解析(二): Bootstrap和Catalina
ShutdownHook原理
在java程序中,很容易在进程结束时添加一个钩子,即ShutdownHook。通常在程序启动时加入以下代码即可
龟仙老人
2021/04/22
7210
如何优雅地停止Java进程
我们知道,Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM。 因此,所谓停止Java进程,本质上就是关闭JVM。 那么,哪些情况会导致JVM关闭呢?
编程随笔
2019/06/27
6.8K0
如何优雅地停止Java进程
System方法总结
最近在研究Android源码,突然看到有很多和System有关,什么System.arraycopy、System.nanoTime(),所以专门花时间看了一下这个类。 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造函数问private,所以它不能被实例化,其中的方法大多使用static关键字修饰。如下为具体方法分析:
haifeiWu
2018/09/11
6260
JVM入门解读
Java虚拟机(JVM)是一种软件,它提供了一个平台独立的运行环境,使得Java程序可以在不同的操作系统和硬件平台上运行。JVM负责解释Java字节码并执行Java程序,它还提供了垃圾回收、内存管理、多线程等功能。
一只
2024/06/26
1530
java如何关闭钩子(ShutdownHook)
Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源、平滑退出的功能。 同理关闭钩子是removeShutdownHook 使用Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用
陈灬大灬海
2020/06/29
2.5K0
相关推荐
Java的System.exit()详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档