`
ivan19861025
  • 浏览: 42072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA并发编程-多线程(2) 优雅退出JVM

    博客分类:
  • Java
 
阅读更多

这里我不知道如何解释优雅一词

先看如下代码:

public class DaemonThread {

	public static void main(String[] args) {
		final Thread t = new Thread() {
			@Override
			public void run() {
				System.out.println("线程working, 并休息20秒");
				try {
					Thread.sleep(1000 * 20);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("线程finish");
			}
		};
		// t.setDaemon(true);//设置为守护线程, 不设置默认为用户线程
		t.start();

		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				while (t.isAlive()) {
					try {
						Thread.sleep(1000 * 1);
						System.out.println("业务线程还没处理完, 请等待");
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println("业务线程执行完毕, JVM退出");
			}
		});
		
		System.out.println("主线程执行完毕,等待其他用户线程执行完毕后退出");
	}

}

正常运行结果如下:

 

$ java DaemonThread
线程working, 并休息20秒
主线程执行完毕,等待其他用户线程执行完毕后退出
线程finish
业务线程执行完毕, JVM退出

假如我在该进程运行结束前执行kill 进程号. 那么t线程的任务仍然会执行. 执行完后JVM正常退出.

运行结果如下:

$ java DaemonThread
线程working, 并休息20秒
主线程执行完毕,等待其他用户线程执行完毕后退出
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
业务线程还没处理完, 请等待
线程finish
业务线程还没处理完, 请等待
业务线程执行完毕, JVM退出

 关键代码如下

Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				while (t.isAlive()) {
					try {
						Thread.sleep(1000 * 1);
						System.out.println("业务线程还没处理完, 请等待");
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println("业务线程执行完毕, JVM退出");
			}
		});

如果 没有这段代码, 在运行kill 进程时, JVM就会立即退出进程.不会等待线程t执行完.

 

 

分享到:
评论

相关推荐

    JAVA并发编程艺术pdf版

    通过深入学习《JAVA并发编程艺术》,开发者能更好地理解并发编程的原理,熟练运用Java提供的并发工具和API,解决实际开发中的多线程问题,提高软件的性能和稳定性。这是一本值得每一位Java开发者研读的书。

    Java_多线程与并发编程总结.doc

    总之,Java的多线程和并发编程是一个复杂而重要的主题,它涉及到操作系统原理、JVM行为、线程管理、同步机制等多个方面,熟练掌握这些知识对于开发高效、可靠的Java应用程序至关重要。通过理解线程的工作原理和使用...

    Java高级特性 - 多线程练习题.zip

    在Java编程语言中,多线程是其一个重要的高级特性,它使得程序可以在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在这个"Java高级特性 - 多线程练习题.zip"中,我们可以看到两个文件,分别是"顺序...

    Java-多线程教学文档

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,从而提高了CPU资源的利用率。...不断学习和掌握新的并发编程技术,才能更好地适应Java平台的发展,编写出高效、稳定的多线程应用程序。

    Java 多线程与并发编程总结.doc

    最后,Java并发编程还涉及线程池的使用,通过预先创建一定数量的线程,避免频繁创建和销毁线程带来的开销。`ExecutorService`是线程池的接口,可以使用`Executors`工厂类创建不同类型的线程池,如固定大小线程池、可...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    java并发编程专题(一)----线程基础知识

    Java并发编程专题(一)----线程基础知识 本文主要介绍了Java并发编程线程的基础知识,旨在帮助大家更好地学习JAVA并发编程。下面将详细讲解线程的基础知识。 一、线程的状态 在Java中,线程的状态可以分为五种:...

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    java多线程编程实例 (源程序)

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    超实用的Java并发多线程教程

    Java并发多线程是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、`Runnable`接口以及`ExecutorService`来实现。下面我们将深入探讨...

    《Java多线程编程实例》随书源码

    在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。《Java多线程编程实例》这本书深入浅出地探讨了Java中的多线程编程,通过丰富的实例帮助读者...

    [图文]Java基础《06-多线程》-.doc

    在Java编程中,多线程是程序设计中的一个重要概念,特别是在并发处理和系统优化中扮演着关键角色。本文将深入探讨Java中多线程的基础知识,主要包括如何创建和管理线程,以及如何停止线程。 首先,让我们了解如何在...

    Java基础[06-多线程].ppt

    Java中的多线程是编程中一个重要的概念,尤其在大数据处理和并发操作中不可或缺。Java提供了两种主要的方式来创建和管理线程:继承`Thread`类和实现`Runnable`接口。 **1. 继承Thread类实现多线程** 当你创建一个...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    Java并发编程基础.pdf

    ### Java并发编程基础知识点 #### 一、线程与线程状态 - **线程基本概念**: - 在Java中,线程是程序执行流的最小单元,它由一个线程体(实现Runnable接口或者继承Thread类)和数据组成。 - **线程创建**:可以...

    Java+多线程与并发编程总结[借鉴].pdf

    总的来说,Java多线程与并发编程是软件开发中不可或缺的部分,它涉及操作系统原理、JVM行为以及Java语言特性。掌握这部分知识,开发者可以编写出更加高效、健壮的并发程序,应对现代计算环境中的挑战。

    Java多线程、并发编程知识点总结[归类].pdf

    Java多线程与并发编程是Java开发中不可或缺的一部分,它涉及到如何高效地处理多个执行单元,使得程序在多核或多处理器环境下能同时运行。以下是对Java多线程、并发编程的一些关键知识点的详细阐述: 1. **线程创建*...

Global site tag (gtag.js) - Google Analytics