首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当CPU非常繁忙时,我的多线程java程序得到一个意外的异常。

问当CPU非常繁忙时,我的多线程java程序得到一个意外的异常。
EN

Stack Overflow用户
提问于 2014-06-22 16:49:04
回答 1查看 336关注 0票数 0

我一直在做一个多线程的java程序,它会使CPU使用率逐渐达到100%。当CPU使用率低时,程序运行正常;但是当CPU使用率接近100%时,我的程序抛出一个NullPointerException。

我将对象放在ArrayList中。当我从ArrayList获得一个对象令牌时,有时会有一个null对象,所以当我在该对象上调用一个方法时,它会抛出一个NullPointerException。

但是我已经检查了程序,没有null对象被放到ArrayList中。

所以,我猜这是因为100%的CPU使用率。有人能给我解释一下原因吗?

EN

回答 1

Stack Overflow用户

发布于 2014-06-22 17:01:05

编写多线程代码(访问相同数据结构的多个线程)是困难的,并且需要的知识和经验超出了您在SO答案中所能提供的范围。

Java内存模型定义了当多个线程访问相同的数据时内存是如何工作的。

也就是说,从你的描述中,我可以告诉你一件你可以改变的事情。不要在多线程中直接使用ArrayList。ArrayList不会保护自己免受所谓的数据竞争的影响。

相反,使用Collections.synchronizedList(...)创建一个列表来保护其内部数据结构不受数据竞争的影响:

代码语言:javascript
复制
List list = Collections.synchronizedList(new ArrayList());

这将确保当您没有将null对象放入列表中时,将不再从列表中获取null对象。

但是,当多个线程对从列表中检索到的对象进行操作时,这并不能解决更复杂的数据竞争问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24349632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档