多线程存在哪些风险

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一直过不去。这就是所谓的活锁。

原文地址:https://www.cnblogs.com/sunnyDream/p/8001336.html