`
longgangbai
  • 浏览: 7281516 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在JVM关闭的时候线程该怎么关闭呢

 
阅读更多

     在编写线程类的时候设置一个标志,用于表示是否开始执行线程内容的业务。当JVM关闭的线程也关闭,那么就需要在在JVM中注册线程,在关闭的时候关闭线程。

package easyway.tbs.transfer.config;

import java.util.concurrent.atomic.AtomicBoolean;

import org.apache.log4j.Logger;
/**
 * FTP客户端服务启动的服务
 * @author  longgangbai
 *
 */
public class FtpClientServiceDaemon  {
	private static final Logger logger = Logger.getLogger(FtpClientServiceDaemon.class);
	/**
	 * 开始启动的进程
	 * @param args
	 */
	public static void main(String[] args) {
		AtomicBoolean  running=new AtomicBoolean(true);
		FtpServiceDaemonThread app = new FtpServiceDaemonThread(running);
	    Runtime.getRuntime().addShutdownHook(new ShutdownHook(app));
	    Thread thread=new Thread(app);
	    logger.info("FtpClientServiceDaemon 开始启动......");
	    thread.start();
	}
	/**
	 * JVM关闭时候执行的线程方法
	 * @author longgangbai
	 *
	 */
	public static class ShutdownHook extends Thread
	{
	        private final FtpServiceDaemonThread instance;

	        public ShutdownHook(FtpServiceDaemonThread instance)
	        {
	            this.instance = instance;
	        }
	        public void run()
	        {
	        	logger.info("Shutting down");
	            try {
	                instance.stop();
	            }
	            catch (Exception e) {
	            	logger.error(e.getMessage());
	                e.printStackTrace(System.err);
	            }
	        }
	}

}

 

分享到:
评论

相关推荐

    JVM中的守护线程示例详解

    在Java虚拟机(JVM)中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。这两类线程的主要区别在于它们的生命周期与JVM的关系。 1. **用户线程**:用户线程是应用程序中常见的线程类型,它们...

    JavaJVM线程调优.pdf

    Java JVM 线程调优是提升程序性能的关键环节,主要涉及到线程栈大小的调整、偏向锁的使用以及自旋锁的优化等方面。本文将深入解析这些知识点,并提供相关建议。 1. **线程栈大小调整**: 线程栈用于存储方法调用的...

    JVM虚拟机深度讲解

    通过阅读本书,开发者可以大幅提升对JVM的理解,从而在编程实践中更好地驾驭这个强大的运行时环境。 JVM(Java Virtual Machine)是Java语言的核心组成部分,它是实现跨平台运行的基础。JVM负责解析字节码,并将其...

    监测JVM各项性能指标

    在Java开发领域,JVM(Java Virtual Machine)是运行Java应用程序的关键组件,它负责解析字节码并执行程序。为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助...

    线程守护程序

    例如,如果一个守护线程无限循环而没有适当的退出条件,那么JVM可能会永远无法关闭。 在"线程守护"这个主题中,我们讨论了如何通过创建和配置守护线程来保护程序的关键服务,并理解了它们在多线程环境中的作用和...

    Java 6 JVM参数选项大全

    - -XX:-UseParallelGC: 在server模式下启用,新生代使用并行清除,老年代使用单线程Mark-Sweep-Compact。在其他情况下默认不启用。 - -XX:-UseParallelOldGC: 默认不启用,适用于老年代和新生代的并行垃圾收集。 - -...

    JVM详细说明和性能调优

    HotSpot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。 JVM ...

    tomcat7安装使用及jvm连接数参数调优

    其中,maxThreads="600" 指定了最大线程数为 600,minSpareThreads="100" 指定了初始化时创建的线程数为 100,maxSpareThreads="500" 指定了一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程,...

    jvm-memory-view-0.93.162

    《JVM内存视图在Android Studio中的应用》 在Android应用程序开发过程中,性能优化是至关重要的环节,而Java虚拟机(JVM)内存管理则是其中的关键部分。"JVM Memory View"工具,版本号为0.93.162,就是针对这一需求...

    JVM 77 道面试题及答案.docx

    3. Serial 与 Parallel GC:Serial 和 Parallel 都是 JVM 中的垃圾回收器,它们之间的主要区别在于 Serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而 Parallel 收集器使用多个 GC 线程来执行。...

    jvm虚拟机参数调优,tomcat调优

    Java虚拟机(JVM)是Java程序运行的基础,它的调优对于提高应用程序的性能至关重要,尤其是在高并发、大数据量的场景下。Tomcat作为流行的Java应用服务器,其性能优化也与JVM设置紧密相关。本篇文章将深入探讨JVM...

    java 变形金刚中的守护神(守护线程)

    而守护线程则不阻碍JVM的关闭,当所有用户线程结束时,即使还有守护线程在运行,JVM也会停止。 创建守护线程的方法是调用`Thread.setDaemon(true)`方法,并且必须在线程启动之前设置。例如,在`Transformer.java`中...

    java程序 两个线程实现学生成绩的读写

    Java程序中的多线程技术是实现并发操作的关键,尤其在处理并发读写数据时,如在本例中,我们有两条线程分别负责读取和写入学生的成绩数据。这样的设计可以提高程序的效率,同时需要确保数据的一致性和安全性。 首先...

    第04章 大促高并发系统下JVM如何调优指导03.pdf

    在大型促销活动期间,高并发系统的性能优化至关重要,尤其是Java虚拟机(JVM)的调优,它直接影响应用程序的响应速度和稳定性。本章节主要探讨了在亿级流量电商大促场景下,如何针对JVM进行调优以提高系统性能。 ...

    java多线程编程

    以上只是Java多线程编程的一部分基础知识,实际开发中还需要考虑线程的性能优化、线程安全问题以及如何优雅地关闭线程等复杂情况。深入理解并熟练掌握这些概念对于编写高效、稳定的多线程程序至关重要。

    java课件-7-JVM

    多线程在JVM中是通过线程栈来实现的,每个线程都有自己的栈,用于存储线程特有的数据。线程同步和锁机制,如synchronized关键字和Lock接口,是Java并发编程的基础。 通过深入学习"java课件-7-JVM",开发者可以更好...

    jvm异常分析文件

    1. **线程未正确关闭**:如果在服务端处理完socket连接后,没有关闭对应的socket,那么端口将继续占用,直到超时释放。 2. **资源泄露**:程序可能存在bug,导致某些资源未能及时回收,比如数据库连接或文件流,这些...

    Java线程状态及切换、关闭线程的正确姿势分享

    WAITING状态是当调用Object.wait、Thread.join或者LockSupport类的park方法的时候,线程进入此状态,该状态若无其他线程主动唤醒,则无期限的等待。TIMED_WAITING状态是同WAITING状态,不过不同的是调用的方法加上了...

Global site tag (gtag.js) - Google Analytics