使用Java thread 多线程会有什么严重的错误?

会不会因为使用thread多线程使程序崩溃?... 会不会因为使用thread多线程使程序崩溃? 展开
 我来答
popantx5CgP
2013-05-17 · TA获得超过176个赞
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:116万
展开全部
会有各种错误吧.
比如,如果一个线程正在迭代某非线程安全集合.
另外一个集合却修改了这个集合.
则会跑出modify什么的.
如果一个线程取了某个对象做操作.另外一个线程却将对象里的内容置空,则会空指针
再比如说.一个线程需要判断某个集合是否为空.如果为空则new一个新的放进去,并在集合里添加一个元素.当他判断到这个集合为空了之后,在new集合的时候,另外一个线程判空,new 集合,并添加了一个元素,
那么第一个线程继续操作,会把第二个线程的元素给抹杀掉.数据丢失.
这样的例子有很多很多.
程序崩溃是轻的.
数据异常会让人崩溃.运行一个程序,每次都得到不同的结果你会是什么表情....
楼上的也说了,线程不宜过多.这是真的.毕竟,线程都是要占用cpu资源.一万个人吃一块冰糕....这个冰糕肯定瞬间就被吃没了.而且,这一万个人基本都吃不着.
更多追问追答
追问
3Q!
如你所说线程会出现各种错误,确实会出现各种错误。

但又有疑问:
线程运行时是抢占CPU的,怎么会出现同时运行的情况呢?不会同时运行的话,怎么出现你所说的如下问题?
比如,如果一个线程正在迭代某非线程安全集合.
另外一个集合却修改了这个集合.

求详解!
追答
是这样的,多线程是怎么运行的呢?
是通过争抢cpu的时间片来运行的.
好,我们假定每个线程每次只能占有1秒的cpu时间片.
则,会出现,第一个线程正在循环一个集合的时候,时间片到期.第二个线程拿到cpu的使用权.在第二个线程的1秒内.他会去添加或者删除这个集合中的数据,然后时间片到期.第一个线程抢到了cpu,继续迭代集合中的数据,系统发现,这个集合呗修改过.于是抛出了modify的这种异常
zheng7824
2013-05-15 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:132万
展开全部
线程会占用系统资源,所以考验运行时候的机器硬件配置了。个人经验。线程过多当然能影响程序,甚至崩溃。一般个人做web项目,最多不会超过十个线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a30501139
2013-05-16 · TA获得超过172个赞
知道小有建树答主
回答量:523
采纳率:0%
帮助的人:253万
展开全部
线程过多会导致占用系统资源,所有才有了线程池的概念。你可以去了解下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式