情景上这样的:我有一个重写了equals方法的类,该类源码如下。然后用一程序将此类多次循环put到HashMap中去,但每次put到1500次左右时,就会出现NullPointerException。
在map.put的方法中,会先去判断put进去的对象是否已经存在于map中,判断方法调用的就是该对象的重写的equals方法,如果说我写的equals有问题的话,为什么前1000多次左右不会出现问题而在最后出现问题呢?起初以为是放到HashMap中的对象太大会出现内存溢出,但并未出现outofmemory异常,用JProfiler进行监测时也发现和heap的使用也没关系……有哪位兄弟帮我解释一下……
重写了equals方法的类:
public class myPolSchema {
// @Field
private String GrpContNo;
private String GrpPolNo;
public String getGrpContNo() {
return GrpContNo;
}
public void setGrpContNo(String aGrpContNo) {
GrpContNo = aGrpContNo;
}
public String getGrpPolNo() {
return GrpPolNo;
}
public void setGrpPolNo(String aGrpPolNo) {
GrpPolNo = aGrpPolNo;
}
public boolean equals(Object otherObject) {
if (this == otherObject)
return true;
if (otherObject == null)
return false;
if (getClass() != otherObject.getClass())
return false;
myPolSchema other = (myPolSchema) otherObject;
return GrpContNo.equals(other.getGrpContNo())
&& GrpPolNo.equals(other.getGrpPolNo());
}
}
测试类:
import java.util.* ;
public class MultiThreading{
// implements Runnable
Map m=Collections.synchronizedMap(new HashMap());
//HashMap m=new HashMap();
Hashtable t=new Hashtable();
public myPolSchema polschema;
public void run()
{
polschema=new myPolSchema();
m.put(polschema, "UPDATE");
System.out.println("put end at " + new Date());
}
public static void main(String[] args) throws Exception {
MultiThreading t=new MultiThreading();
for(int i=0;i <=25000;i++){
try{
t.run();
//Thread.sleep(100);
}
catch(Exception ex){
//在我本地测试时当运行大概1500左右次的时间就会抛出NullPointerException
System.out.println("i is: " + i);
throw ex;
}
}
}
}
如果您从源码上看不出来我所说的问题,在此处下载源码……
分享到:
相关推荐
Linux Shell 命令解释步骤程序实现 Linux Shell 命令解释是 Linux 操作系统中最基本也是最重要的一部分,它负责处理用户与操作系统之间的交互动作,并且给出相应的操作系统的输出结果。 Shell 基本上是一个命令...
很抱歉,但根据您给出的信息,这似乎是一个关于中学生物学科的考试试题文件,标签为“课件”,且提到了具体的学习阶段(八年级)和地区(山东省...如果您有孩子的学习难题或者需要解释的特定知识点,也请一并告诉我。
描述进一步解释了问题的细节,指出这不是一个正式发布的版本,因此可能存在动态连接库不完整的问题。"动态连接库"(Dynamic Link Library, DLL)是Windows操作系统中一种共享代码的机制,允许多个程序共享同一段代码...
然而,由于Perl本身是解释执行的,这意味着在没有Perl环境的计算机上无法直接运行Perl脚本。这就是Perl2Exe存在的意义,它通过将Perl代码编译成可执行文件,使得程序可以在不装Perl的机器上执行。 Perl2Exe的工作...
- **依赖性管理**:检查Perl脚本中是否包含外部模块,这些模块需要一并包含在转换过程中,否则可执行程序可能无法正常运行。 - **调试和测试**:转换后的.exe文件可能需要进行充分的测试,因为某些Perl特性或库在...
这个工具的主要目标是解决常规卸载程序可能无法完全清除的软件残留问题,从而保持系统的清洁和高效运行。 在Windows操作系统中,有时候使用控制面板或现代的“添加或删除程序”功能进行软件卸载可能不彻底,可能会...
然而,由于信息有限,无法提供更深入的解释。 在压缩包内的文件“[小偷采集]1听寻址器 v1.0_1ting”可能是一个早期版本的“听寻址器”软件,或者是一个针对该软件的采集工具。"小偷采集"可能是指一种数据抓取或爬虫...
有朋友在阅读关于CNN代码解读的http://blog.csdn.net/zouxy09/article/details/9993743这篇博文后,遇到了代码无法运行的问题,比如:Undefined function 'sigm' for input arguments of type 'double'.等。这是因为...
本文将详细解释"ntldr"文件的功能,以及如何在格式化C盘后通过它来恢复系统的启动能力。 "ntldr"全称为"New Technology Loader",是Windows NT系列操作系统(包括Windows 2000、Windows XP和Windows Server 2003)...
转换过程中需要注意的是,批处理脚本中的所有依赖(如外部文件、路径等)都需要在转换时一并考虑,否则EXE文件可能无法正常工作。 5. **安全性问题**:虽然将BAT转换为EXE可以使程序更易于分发和运行,但这也带来了...
Subpar通过将Python解释器、标准库和其他依赖项一并打包进单个可执行文件中,使得用户只需双击即可运行程序,无需预先安装Python环境。 Subpar的核心功能是基于Google的沙箱技术,它可以构建出一个受限制的环境,...
- **体积问题**:由于包含了Python解释器和所有依赖,打包后的文件可能会较大。 bbfreeze是一个强大的工具,对于希望简化分发流程的Python开发者来说,它是一个值得考虑的选择。然而,也有其他类似的工具,如...
16. CalendarProvider.apk:日历数据提供者,与日历应用关联,日历删除后可一并删除。 17. CertInstaller.apk:证书服务,涉及移动支付等安全功能,不建议删除。 18. com.qualcomm.location.apk:高能CPU情景模式...
- 《税收征管法》不仅规定复议前置,而且要求在复议前必须先行缴纳税款或提供相应担保,这违反了行政复议便民原则,可能导致纳税人因税务机关违法征税或自身特殊情况无法缴税(或提供担保)而无法启动复议程序,...
以下是对这些关键DLL文件的详细解释: 1. **libeay32.dll**:这是OpenSSL库的一部分,主要负责加密算法的实现。OpenSSL是一个开源的库,包含了各种加密算法,如RSA、DSA、AES等,用于实现SSL/TLS协议。在Delphi XE7...
以下是对这些知识点的详细解释: 1. 应付票据的会计处理: - 签发票据:当企业签发应付票据以购买材料或支付增值税时,会借记“材料采购”和“应交税费—应交增值税(进项税额)”,贷记“应付票据”。 - 到期...
解释:我只在Win10(最新预览版)+高分屏的电脑上做过测试,之前有易友提到win7等系统可能还是会取值不准确,不过主要原理我已说明,有问题的可以自己研究研究,我猜测问题应该是显示缩放比的计算有问题。...
引用计数是一种跟踪Python对象使用情况的技术,这里的“引用计数”可能指的是依赖关系的计数,即在卸载一个包之前,先检查哪些其他包依赖于它,然后一并卸载这些依赖。这种方法可以解决多重依赖问题,即一个包可能被...
5. **安装Kies或Smart Switch**:三星的官方应用程序Kies或Smart Switch在安装过程中会一并安装USB驱动,可以尝试使用它们来安装。 总结,三星安卓USB驱动对于三星设备的日常使用和开发工作具有不可替代的作用。...
【描述】: 本文将探讨两种算法,一种是判断无向图是否存在特定性质的算法,另一种是任务分配算法,这两种算法都采用了贪心策略来解决问题。 【正文】: 在计算机科学中,贪心算法是一种在每一步选择中都采取在当前...