多线程存在哪些风险
1.线程安全性问题
2.性能问题:线程上下文切换,带来一定的性能损耗。
3.活跃性问题:死锁、饥饿、活锁。
a.死锁:
A对象有a1资源,B对象有b1资源。A对象必须先获得b1资源才可以使用a1资源,而B对象必须先获得a1资源才可以使用b1资源。它们互相想要对方的资源,但是又不肯释放自己拥有的资源。
检测死锁步骤:
1.利用快捷键“win+R”打开“运行”窗口,接着在窗口中输入cmd并点击回车。
2.在窗口中输入jconsole,在弹出来的窗口中选择自己想要的进程如IDEA,点击进入。
3.点击线程,左下角有个按钮可以检测死锁。
b.饥饿:
中午食堂排队打饭,很多人在排队,每次打饭的时候总有人不断的插队,这样导致排队在后面的人有可能要排很久很久。也就是所谓的饥饿问题。
c.活锁:
两个人A和B中间有条河,然后有两条独木桥C和D。第一次,A选择C独木桥,很不巧的是,B也恰恰选择了C独木桥。然后,他们各自礼貌的说,我让给你吧。结果,第二次,A重新选择了D独木桥,可是,B也是重新选择了D独木桥。然后,他们再次礼貌的说,我让给你过。就这样一直反复反复,导致A和B一直过不去。这就是所谓的活锁。
作者:凌晨六点半
出处:http://www.cnblogs.com/sunnyDream/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!