007 线程风险

Posted trekxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了007 线程风险相关的知识,希望对你有一定的参考价值。

一 . 概述

多线程可以帮助我们实现并发,但是并发会带来一些问题.

[1]线程安全问题

[2]活跃问题

[3]性能问题


 

二 . 活跃性问题

常见的活跃性问题有:

[1]死锁 :

  经典的死锁问题有哲学家问题,当出现死锁的时候,程序就无法继续运行了.

    出现死锁问题的主要原因就是:

        仅仅获取部分资源,但是不会放弃当前的资源.

[2]饥饿

  由于线程优先级的问题.有的线程可能很久都不会运行一次.

    经典的问题: 高优先级的线程长时间占用时间片,其他的低优先级的线程就被饿死了.

[3]活锁

  经典的问题:

    两个线程互相谦让资源,但是没有放弃的资源之后又获取了其它的资源.

      比如说让路的问题.

    活锁比死锁要危害大很多,也不容易进行检测.

死锁检测:

  我们可以使用工具来进行死锁的检测,但是对于饥饿和活锁就很难检测了.


 

三 . 性能问题

  多线程的并发的根本是时间片在切换,但是时间片的切换是需要时间的.

    当切换时间片花费了更多的时间之后,原先都给程序正常运行的资源都被时间片切换

      使用了,那么性能就会出现问题.

  性能的问题的核心就是:

    确定是否需要并发,多少并发量,并发的时间的花费.


 

四 .安全问题

  当多线程执行时,会发生资源的争夺问题,如果控制不当,那么就会出现错误的结果.

    这就是线程安全问题.

  安全问题的解决:

      使用线程同步来解决该问题.

以上是关于007 线程风险的主要内容,如果未能解决你的问题,请参考以下文章

007-atomic包的原理及分析

Java千百问_01基本概念(007)_线程的状态有哪些

回炉重造之重读Windows核心编程-007-线程的调度优先级与亲缘性

实习培训——Java多线程

ANDROID_MARS学习笔记_S01原始版_007_Handler及线程的简单使用

多线程带来的风险——线程安全