008 优先级和饥饿问题

一 . 概述

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

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

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


二 . 动态优先级

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

当将到最低的时候,

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


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

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

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


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

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


五 . 问题的解决

  优先级的问题:

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

  同步产生的问题:

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

猜你喜欢

转载自www.cnblogs.com/trekxu/p/8975631.html
008