开发者社区> 问答> 正文

多线程问题。某个线程崩溃了,程序无法终止的问题。?报错

如题。我的程序创建了10个线程,程序运行一段时间后就会报错


“Exception in thread "线程名" java.lang.OutOfMemoryEror: Java heap space”


我查了下可以设置eclipse的配置文件改善,不过修改过之后运行一段时间仍然报错。

由于程序终止的条件最后是空闲进程数量=10。这样子程序便无法终止,请问有什么办法解决这个问题呢?


整个代码逻辑是

for(10个数据)
{
    A a = new A();
    a.b(data);
}



其中,创建线程是A的b方法来做的。卡在那里之后,整个程序卡住不动了。

我试过这个方法,给每个for循环一个最大的时间,比如10分钟,如果还没执行完就执行下一个数据操作。但是经过试验发现,如果出现了上述的Exception,下一个数据也无法操作。


现在程序只能执行1小时左右,便会卡住。

请问造成这种情况的原因是什么呢?是因为调用完b方法只会我没有特地去关闭每一个线程吗?如果是,应该怎么实现呢?如果不是,这个地方怎么处理比较好。

展开
收起
爱吃鱼的程序员 2020-06-14 15:16:46 811 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    只有十个线程处理数据?还是每次都创建10个线程?

    十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?

    线程安全方面,你还需要多考虑考虑

    内存泄露,可能是你的的工作方法里创建的线程,对象等东西没有得到释放

    解决方法:检查你的程序资源有没有被复用:线程可以用线程池,对象可以用对象池

    引用来自“linxyz”的评论

    只有十个线程处理数据?还是每次都创建10个线程?

    十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?

    线程安全方面,你还需要多考虑考虑

    引用来自“linxyz”的评论

    只有十个线程处理数据?还是每次都创建10个线程?

    十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?

    线程安全方面,你还需要多考虑考虑

    程序设计就有问题,去查查JAVA的 ThreadPoolExecutor,ScheduledThreadPoolExecutor等几个类

    看看这样作能停止么。

    http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

    先用jmap拿到dump文件进行分析

    引用来自“茶壶”的评论

    看看这样作能停止么。

    http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

    引用来自“茶壶”的评论

    看看这样作能停止么。

    http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

    哈哈,本来以为没有什么来着是吧。
    2020-06-14 15:17:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载

相关实验场景

更多