目录

线程饥饿

# 线程饥饿

# 发生原因
  1. 高优先级的线程占用了大部分的CPU时间,低优先级线程发生饥饿
  2. 线程被永久堵塞在一个等待进入同步块的状态
  3. 线程在等待一个本身也处于永久等待完成的对象

当为每个线程设置优先级时,优先级越高,就能获得越高的CPU使用时间,一旦中途一直有高优先级的线程进入排队,那么最低优先级的线程将永远无法使用资源!

其次,Java的synchronized不保证线程进入语句块的顺序,如果有一个线程一直阻塞在synchronized语句块,将永远无法进入synchronized

同样的,notify也无法保证唤醒的顺序,因此会导致某一个wait有可能一直陷入长期沉睡,久而久之永久饥饿!

# 解决方法

建议不要过于依赖synchronized,而应该使用自己编写的lock进行状态切换,这样可以最大程度控制锁。

最近更新
01
基本知识
07-18
02
卷积神经网络识别图像
07-18
03
损失函数
07-18
更多文章>