终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题,如果在静态方法中有访问多线程共享数据,就要小心多线程同步问题。
同时,在使用线程池进行开发时,要特别注意线程实例的资源释放问题,不要想当然的认为没有创建变量名来引用所创建的线程实例,线程在运行完就会自动释放资源,事实证明并没有释放。如果没有显示创建变量名引用线程实例,系统会自动创建一个隐藏变量来应用这个实例,会造成线程池运行完线程后依然没有释放资源的问题。
下面是我进行内存泄漏分析后的结果。
项目中使用了EDU.oswego.cs.dl.util.concurrent的线程池进行开发,使用线程池运行线程 ProcessThread 。
public class ProcessThread implements Runnable{ 略}
如果就这样使用线程池运行线程会造成严重的内存泄漏问题:
ThreadPool.getInstance().execute( new ProcessThread(messages[i]) );
代码更改后(如下所示),暂时就没有发现内存泄漏了
ProcessThread thread = new ProcessThread(messages[i]);
ThreadPool.getInstance().execute( thread );
thread = null;
分享到:
相关推荐
在“Qt多线程文件传输静态编译版本”中,可能包含了编译好的可执行文件,以及相关的源代码示例。这个压缩包可以帮助开发者理解如何结合Qt的多线程和网络编程功能实现高效、便携的文件传输应用。通过学习和分析这些...
线程池管理和多线程上传是并发编程中的一个重要实践,特别是在大数据传输和网络服务中。在Java等编程语言中,线程池通过有效地管理和复用线程资源,避免了频繁创建和销毁线程带来的开销,提升了系统性能。下面将详细...
《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...
多线程Java程序安全行为模型的静态检查方法 本文提出了一种多线程Java程序安全行为模型的静态检查方法。该方法使用参数化扩展上下文无关文法来抽象表示安全相关行为模型,并提供了从多线程Java程序自动生成安全相关...
Java 中的静态变量、静态方法、静态块和静态类 Java 中的静态变量、静态方法、静态块和静态类是 Java 编程语言的四个重要概念,它们之间存在着紧密的关系。下面将对这四个概念进行详细的介绍。 一、静态变量...
### 多线程使用原因及关键技术...特别是在Java中,合理使用`synchronized`关键字、`wait()`和`notify()`等机制可以帮助开发者设计出既安全又高效的多线程程序。希望本文的内容能够帮助读者更好地理解和应用多线程技术。
"面试中多线程问题" 多线程是 Java 编程中一个重要的概念,掌握多线程可以帮助开发者更好地编写高效、稳定的程序。以下是面试中常见的多线程问题和解释: 1. 实现多线程的几种方法? Java 中有两种方式可以实现多...
理解并正确使用同步方法是编写安全多线程Java程序的关键。开发者应根据具体需求权衡性能和数据安全性,合理选择静态或非静态同步。在实际开发中,还可以探索其他并发工具,如`ReentrantLock`、`Semaphore`等,它们...
本案例“静态代理案例---线程买票”是一个典型的多线程应用,通过模拟售票过程,帮助我们理解如何在Java中实现线程同步与通信。 首先,我们来探讨多线程的基本概念。在单核CPU环境下,多线程并不是真正意义上的同时...
易语言多线程支持库2.1是一款专为易语言设计的库文件,它提供了在易语言编程环境中实现多线程功能的能力。多线程是现代计算机程序设计中一个重要的概念,它允许程序同时执行多个任务,提高了程序的运行效率和响应性...
由于静态成员不依赖于类的实例,因此它们无法访问非静态成员,也不能在多线程环境中保证线程安全。如果需要处理多线程问题,可能需要额外的同步措施。 总结来说,"静态"关键字在编程中提供了许多有用的特性,如简化...
对于静态成员、全局变量和共享对象,必须确保它们在多线程环境中的访问是安全的。使用`volatile`关键字、`Interlocked`类或其他同步机制可以帮助实现线程安全。 8. Task并行库(TPL): .NET Framework 4.0引入了...
自己写的一个小型静态多线程服务器,只做了GET和PUT方法
总的来说,通用静态页面生成服务是现代Web开发中不可或缺的一部分,它结合了多线程技术和Windows服务的特性,为企业级网站提供了高效、灵活的解决方案。通过定制和优化,我们可以构建出更符合业务需求的静态页面生成...
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....
开发者需要手动处理同步,以确保多线程环境下的正确性。 理解JVM内存管理和静态成员的工作原理对于优化Java程序的性能至关重要。合理的对象创建、内存使用以及静态成员的恰当运用,都可以帮助提升程序效率并降低...
在本文中,我们将深入探讨C#中的多线程概念、.NET框架对多线程的支持以及如何在实践中应用多线程。 首先,线程是进程中的执行单元,是操作系统调度CPU资源的基本单位。在Windows系统中,进程可以包含多个线程,共同...
Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,可以使用 ...
10. **RTOS应用案例**:可能包含了实际的硬件接口操作,如LED闪烁、串口通信、液晶显示等,通过这些实例来演示多线程在实际项目中的应用。 通过学习这个示例项目,开发者不仅可以掌握STM32单片机的RT-Thread多线程...