在编写线程类的时候设置一个标志,用于表示是否开始执行线程内容的业务。当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的理解,从而在编程实践中更好地驾驭这个强大的运行时环境。 JVM(Java Virtual Machine)是Java语言的核心组成部分,它是实现跨平台运行的基础。JVM负责解析字节码,并将其...
在Java开发领域,JVM(Java Virtual Machine)是运行Java应用程序的关键组件,它负责解析字节码并执行程序。为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助...
例如,如果一个守护线程无限循环而没有适当的退出条件,那么JVM可能会永远无法关闭。 在"线程守护"这个主题中,我们讨论了如何通过创建和配置守护线程来保护程序的关键服务,并理解了它们在多线程环境中的作用和...
- -XX:-UseParallelGC: 在server模式下启用,新生代使用并行清除,老年代使用单线程Mark-Sweep-Compact。在其他情况下默认不启用。 - -XX:-UseParallelOldGC: 默认不启用,适用于老年代和新生代的并行垃圾收集。 - -...
HotSpot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。 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...
而守护线程则不阻碍JVM的关闭,当所有用户线程结束时,即使还有守护线程在运行,JVM也会停止。 创建守护线程的方法是调用`Thread.setDaemon(true)`方法,并且必须在线程启动之前设置。例如,在`Transformer.java`中...
Java程序中的多线程技术是实现并发操作的关键,尤其在处理并发读写数据时,如在本例中,我们有两条线程分别负责读取和写入学生的成绩数据。这样的设计可以提高程序的效率,同时需要确保数据的一致性和安全性。 首先...
在大型促销活动期间,高并发系统的性能优化至关重要,尤其是Java虚拟机(JVM)的调优,它直接影响应用程序的响应速度和稳定性。本章节主要探讨了在亿级流量电商大促场景下,如何针对JVM进行调优以提高系统性能。 ...
以上只是Java多线程编程的一部分基础知识,实际开发中还需要考虑线程的性能优化、线程安全问题以及如何优雅地关闭线程等复杂情况。深入理解并熟练掌握这些概念对于编写高效、稳定的多线程程序至关重要。
多线程在JVM中是通过线程栈来实现的,每个线程都有自己的栈,用于存储线程特有的数据。线程同步和锁机制,如synchronized关键字和Lock接口,是Java并发编程的基础。 通过深入学习"java课件-7-JVM",开发者可以更好...
1. **线程未正确关闭**:如果在服务端处理完socket连接后,没有关闭对应的socket,那么端口将继续占用,直到超时释放。 2. **资源泄露**:程序可能存在bug,导致某些资源未能及时回收,比如数据库连接或文件流,这些...
WAITING状态是当调用Object.wait、Thread.join或者LockSupport类的park方法的时候,线程进入此状态,该状态若无其他线程主动唤醒,则无期限的等待。TIMED_WAITING状态是同WAITING状态,不过不同的是调用的方法加上了...