008 优先级和饥饿问题

Posted trekxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了008 优先级和饥饿问题相关的知识,希望对你有一定的参考价值。

一 . 概述

在上面我们说到由于线程的优先级的设置不当,造成了线程运行的程度会不同,

  最终会有一些线程很难得到运行的机会.

  一般操作系统是使用时间片轮转的方式进行线程的优先级的改变.


 

二 . 动态优先级

现代操作系统一般都使用动态优先级的模式,也就是说,一个线程当运行一次之后,它的优先级就会降低,

当将到最低的时候,

该线程的优先级又会被设置为最高.


 

三 .由于阻塞导致饥饿问题

  一个线程由于抢夺资源失败,导致该线程进入锁池之中(阻塞队列之中).

  当获取该资源的线程运行的时间花费的时间较多,那么进入阻塞队列的线程就会发生饥饿问题.


 

四 . 由于wait导致的饥饿问题

  由于同步不当,一个线程可能会进入到等待池之中,当该线程迟迟不能被唤醒,那么也会发生饥饿的问题.


 

五 . 问题的解决

  优先级的问题:

    优先级的设置只是一个概率上的事情,只有在大的统计范围内才有效.

  同步产生的问题:

    我们可以使用锁来替代synchronized完成任务.

以上是关于008 优先级和饥饿问题的主要内容,如果未能解决你的问题,请参考以下文章

如何避免优先级队列中的饥饿

高并发编程-05-活跃性问题

饥饿的小易(枚举+广度优先遍历(BFS))

java线程 公平锁 ReentrantLock(boolean fair)

Linux进程调度

007 线程风险