打破循环等待条件:实行资源有序分配策略 。 对所有资源排序编号 , 所有进程对资源的请求必须严格按资源序号递增的顺序提出 , 即只有占用了小号资源才能申请大号资源 , 这样就不回产生环路 , 预防死锁的发生 。
(2). 死锁避免的基本思想
死锁避免的基本思想是动态地检测资源分配状态 , 以确保循环等待条件不成立 , 从而确保系统处于安全状态 。 所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值) , 那么系统状态是安全的 , 换句话说就是 , 如果存在一个安全序列 , 那么系统处于安全状态 。 资源分配图算法和银行家算法是两种经典的死锁避免的算法 , 其可以确保系统始终处于安全状态 。 其中 , 资源分配图算法应用场景为每种资源类型只有一个实例(申请边 , 分配边 , 需求边 , 不形成环才允许分配) , 而银行家算法应用于每种资源类型可以有多个实例的场景 。
(3). 死锁解除
死锁解除的常用两种方法为进程终止和资源抢占 。 所谓进程终止是指简单地终止一个或多个进程以打破循环等待 , 包括两种方式:终止所有死锁进程和一次只终止一个进程直到取消死锁循环为止;所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源 , 此时必须考虑三个问题:
(I). 选择一个牺牲品
(II). 回滚:回滚到安全状态
(III). 饥饿(在代价因素中加上回滚次数 , 回滚的越多则越不可能继续被作为牺牲品 , 避免一个进程总是被回滚)
进程有哪几种状态?
就绪状态:进程已获得除处理机以外的所需资源 , 等待分配处理机资源;
运行状态:占用处理机资源运行 , 处于此状态的进程数小于等于CPU数;
阻塞状态: 进程等待某种条件 , 在条件满足之前无法执行;

文章插图
线程有几种状态?
1. 新建(NEW):新创建了一个线程对象 。
2. 可运行(RUNNABLE):线程对象创建后 , 其他线程(比如main线程)调用了该对象的start()方法 。 该状态的线程位于可运行线程池中 , 等待被线程调度选中 , 获取cpu 的使用权 。
3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) , 执行程序代码 。
4. 阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权 , 也即让出了cpu timeslice , 暂时停止运行 。 直到线程进入可运行(runnable)状态 , 才有机会再次获得cpu timeslice 转到运行(running)状态 。 阻塞的情况分三种:
(一). 等待阻塞:运行(running)的线程执行o.wait()方法 , JVM会把该线程放入等待队列(waitting queue)中 。
(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时 , 若该同步锁被别的线程占用 , 则JVM会把该线程放入锁池(lock pool)中 。
(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法 , 或者发出了I/O请求时 , JVM会把该线程置为阻塞状态 。 当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时 , 线程重新转入可运行(runnable)状态 。
5. 死亡(DEAD):线程run()、main() 方法执行结束 , 或者因异常退出了run()方法 , 则该线程结束生命周期 。 死亡的线程不可再次复生 。
- QQ飞车小橘子头像 qq飞车小橘子禁图封面
- 乳胶床垫有正反面区分吗 乳胶床垫有正反面区分吗知乎
- 台式电脑怎么进入bios 电脑怎么进入bios界面
- 韩束抚纹面霜 韩束黑金抚纹修护丝绒霜好吗怎么用
- 韩束抚纹面霜 韩束黑金抚纹修护丝绒霜好用吗?
- 床对着窗户风水好不好 床下面空的风水好吗
- 圆形铣刀片 铣刀片规格大全
- 聚划算的化妆品都是正品吗 聚划算里面的东西是正品吗
- 坟墓后面修公路好不好 坟前庙后是风水宝地
- 换牙过程 换乳牙是先换上面还是下面
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
