在tomcat容器中,在使用EWS时,在jar包common-http-client.jar去和exchange server连接,它启动了一个线程名叫”MultiThreadedHttpConnectionManager cleanup“,然后所有的connection都是在这个线程上完成的,当undeploy这个模块时,这个线程确没有关闭,提示警告:appears to have started a thread named [MultiThreadedHttpConnectionManager cleanup] but has failed to stop it. This is very likely to create a memory leak.
所以需要关闭这个线程。
于是我在undeploy的时候添加一个监听,在接口ServletContextListener 中实现contextDestroyed方法。
1. 添加以下内容在web.xml
<listener> <listener-class>com.tsystems.showcase.calendar.listener.PortletUndeployListener</listener-class> </listener>
2. 新建类PortletUndeployListener 实现接口ServletContextListener .
public class PortletUndeployListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { MultiThreadedHttpConnectionManager.shutdownAll(); } @Override public void contextInitialized(ServletContextEvent arg0) { // Do nothing. } }
相关推荐
线程池通常包含几个关键组件:工作队列(存放待处理的任务)、工作线程(执行任务)、线程调度策略(决定哪个线程执行哪个任务)以及线程回收机制(当线程完成任务后返回线程池或被终止)。通过合理配置线程池的大小...
线程的生命周期管理是保证程序稳定的关键,合理的线程回收能避免资源泄露。 调度策略决定了线程的执行顺序和时间片分配,通过设置线程优先级,可以控制不同线程的执行权重。线程优先级过高可能导致优先级反转或...
在示例中,可能展示了如何利用线程池创建和管理工作线程,以及如何在不使用`TerminateThread`的情况下,将已完成任务的线程回收到线程池中。 文件"KTTEST"可能是示例代码的主程序或测试用例,包含具体的实现细节,...
2. **线程池管理**:线程池的实现通常包括任务队列、线程调度和线程回收等机制。 综上所述,Linux多线程编程涉及到线程的创建、同步、管理等多个方面,理解并熟练掌握这些概念和技术对于编写高效的多线程程序至关...
- **线程回收**:线程在60秒内未被使用则会被终止并移除,有助于管理长期闲置的资源。 - **资源节约**:当线程池长期闲置时,几乎不消耗任何资源。 - **实现原理**: - 底层实现是通过 `ThreadPoolExecutor` 类...
- **线程回收**:当线程池不再使用时,所有线程应被终止并清理资源。 5. **源代码分析**: - `ThreadPool`类可能是线程池的实现,包含工作线程、工作队列、锁和条件变量等成员变量。 - 类中可能包含`add_task()`...
即使子线程先执行完毕,但未被`join`之前,它仍处于"joinable"状态,等待父线程回收。一旦`join`,子线程的资源会被释放,其返回值(如果有)可以被主线程获取。 Perl线程的状态包括:创建(create)、运行...
4. **线程回收**:当线程空闲时间超过`keepAliveTime`,且线程池线程数大于核心线程数,会回收线程。 5. **拒绝策略**:当线程池和队列都满,根据拒绝策略处理新任务,如抛出异常、忽略任务、调用系统默认操作或...
1. 线程概述 2. 创建线程 2.1 线程函数 2.2 创建线程 3. 线程退出 4. 线程回收 4.1 线程函数 4.2 回收子线程数据 5. 线程分离 6. 其他线程函数 6.1 线程取消 6.2 线程 ID 比较
阅读`threadmanager.cpp`和`threadmanager_instance.cpp`是理解线程管理器实现的关键,它们应包含线程池的初始化、任务调度和线程回收的逻辑。同时,查看`Thread Manager.doc`文档可以获取更清晰的设计背景和使用...
Delphi多线程DB组件接口特性创建可自动回收的Query对象池,通过指定接口调用线程中的Query处理数据库操作,当请求结束后自动释放外部引用; 简要说明: TParamItem 管理存储过程的参数; ...
这些测试可能涵盖任务提交、线程调度、线程回收、异常处理等多个方面。 总之,`MyThreadPool`项目是学习和实践C#多线程编程的好例子,它展示了如何自定义线程池以适应复杂的应用场景,同时也提醒我们,即使有标准库...
".NET 的 GC 垃圾回收原理及实现" .NET 的 GC 垃圾回收原理及实现是 ASP.NET ...GC.Collect 方法的参数包括对指定的代进行回收、指定回收次数、强制回收 或 择机回收、阻塞式回收 或 后台线程回收、压缩 或 清理等。
QT线程及多线程是Qt库中的一个重要组成部分,它为开发者提供了在C++环境中进行并发编程的能力。在现代计算机系统中,多线程技术被广泛应用于提高程序的执行效率和响应速度,尤其是在处理耗时任务或者需要同时进行多...
- 处理异常情况下的线程回收。 ##### 5.3 CWorkerThread CWorkerThread是从CThread派生出来的具体线程类,负责执行具体的任务。其主要特性包括: - 实现`Run`方法,执行具体任务。 - 支持线程间的通信和同步机制。 ...
综上所述,这份PPT教程详细地阐述了多核编程在.NET环境下的应用,特别是如何构建多线程TCP服务,处理客户端连接,实现线程安全,以及优化性能的策略如垃圾线程回收和线程池的使用。这对于理解和实践多核编程在分布式...
本PPT课件主要探讨了在.NET环境下如何实现多线程TCP服务,以及如何处理和优化客户端的连接管理,包括线程安全、垃圾线程回收和线程池的使用。 首先,课件介绍了一个.NET环境下的多线程TCP服务案例,它使用C#语言...
本案例分析主要关注在.NET环境下如何构建一个多线程TCP服务,特别强调了线程管理、垃圾线程回收以及线程池的使用。以下是相关知识点的详细说明: 1. **多线程TCP服务**: - 在.NET环境中,`TcpListener`类用于创建...
3. 线程回收:当线程池中的线程长时间处于空闲状态时,CThreadPool会自动销毁部分线程,释放系统资源,以提高系统的整体效率。 CWorkerThread CWorkerThread是从CThread派生出来的实际执行任务的线程类。它的主要...