在编写线程类的时候设置一个标志,用于表示是否开始执行线程内容的业务。当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);
}
}
}
}
分享到:
相关推荐
在Java虚拟机(JVM)中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。这两类线程的主要区别在于它们的生命周期与JVM的关系。 1. **用户线程**:用户线程是应用程序中常见的线程类型,它们...
Java JVM 线程调优是提升程序性能的关键环节,主要涉及到线程栈大小的调整、偏向锁的使用以及自旋锁的优化等方面。本文将深入解析这些知识点,并提供相关建议。 1. **线程栈大小调整**: 线程栈用于存储方法调用的...
### JVM-Tomcat线程-数据库连接池设置建议 #### 一、JVM参数设置 在设置JVM参数时,我们需要遵循一定的原则以确保应用程序能够高效稳定地运行。以下是一些具体的设置指南: 1. **Java堆大小设置**: - `Xmx` 和 ...
通过阅读本书,开发者可以大幅提升对JVM的理解,从而在编程实践中更好地驾驭这个强大的运行时环境。 JVM(Java Virtual Machine)是Java语言的核心组成部分,它是实现跨平台运行的基础。JVM负责解析字节码,并将其...
在Java开发领域,JVM(Java Virtual Machine)是运行Java应用程序的关键组件,它负责解析字节码并执行程序。为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助...
14. **JVM关闭**:当JVM退出时,可能有一些线程还在运行,因此需要注册`ShutdownHook`,这是一组在JVM关闭时执行的钩子函数,用于执行必要的清理工作。 15. **关闭钩子(Shutdown Hook)**:通过`Runtime....
- **`maxIdleTime`**:线程闲置时间,如果一个线程在指定时间内没有被使用,将会被关闭。 - **`enableLookups`**:是否启用DNS反向查找,通常设置为`false`以提高性能。 以上就是关于JVM内存配置优化以及Tomcat并发...
- **-disableassertions[:<packagename>""|:]** 或 **-da[:<packagename>""|:]**:用来设置JVM关闭断言处理。默认情况下,JVM关闭断言处理。该参数通常用于特定包内不需要断言的场景,例如包`com.example.test`中的...
标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能...
例如,如果一个守护线程无限循环而没有适当的退出条件,那么JVM可能会永远无法关闭。 在"线程守护"这个主题中,我们讨论了如何通过创建和配置守护线程来保护程序的关键服务,并理解了它们在多线程环境中的作用和...
- -XX:-UseParallelGC: 在server模式下启用,新生代使用并行清除,老年代使用单线程Mark-Sweep-Compact。在其他情况下默认不启用。 - -XX:-UseParallelOldGC: 默认不启用,适用于老年代和新生代的并行垃圾收集。 - -...
在进行JVM调优之前,先通过该命令查看当前的参数值,有助于避免重复设置已经默认开启的参数,同时也可以了解不同版本之间的差异。 2. **-XX:+AlwaysPreTouch** - 启动时预访问并置零所有分配的内存页面,虽然可能...
### IBM JVM 参数选项详解 IBM Java虚拟机(JVM)为开发者提供了丰富的配置选项来优化应用程序性能、诊断问题以及调整各种资源使用情况。本文将详细解释IBM JVM中的关键参数及其功能,帮助您更好地管理和调优Java...
6. **-enableassertions/-disableassertions**:控制JVM的断言处理机制,通过开启或关闭特定包或类的断言,可以在不影响整体性能的情况下,进行更细粒度的代码质量检查和调试,提高了软件开发的健壮性和测试的效率。...
HotSpot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。 JVM ...
**JVM内存溢出**是一种常见的运行时错误,指的是程序在执行过程中因为无法获得足够的内存资源而导致的问题。这种问题通常发生在程序尝试分配超出系统可用内存限制的新对象时。了解JVM内存结构是理解内存溢出的关键。...
其中,maxThreads="600" 指定了最大线程数为 600,minSpareThreads="100" 指定了初始化时创建的线程数为 100,maxSpareThreads="500" 指定了一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程,...
《JVM内存视图在Android Studio中的应用》 在Android应用程序开发过程中,性能优化是至关重要的环节,而Java虚拟机(JVM)内存管理则是其中的关键部分。"JVM Memory View"工具,版本号为0.93.162,就是针对这一需求...
3. Serial 与 Parallel GC:Serial 和 Parallel 都是 JVM 中的垃圾回收器,它们之间的主要区别在于 Serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而 Parallel 收集器使用多个 GC 线程来执行。...
Java虚拟机(JVM)是Java程序运行的基础,它的调优对于提高应用程序的性能至关重要,尤其是在高并发、大数据量的场景下。Tomcat作为流行的Java应用服务器,其性能优化也与JVM设置紧密相关。本篇文章将深入探讨JVM...