饥饿和公平
下文笔者将讲述java多线程中的“饥饿与公平”的相关知识,如下所示:
Java中饥饿与公平的概念
当一个线程因为CPU时间全部被其他线程获取而无法获取CPU运行时间时,我们将这种状态称之为“饥饿” 此时此线程由于“饥饿”而无法得到运行,下文讲述java中解决饥饿的方法---公平性,如下所示:Java中产生饥饿的原因
- 高优先级线程使用所有的低优先级线程的CPU时间
- 线程被永久堵塞在一个等待进入同步块的状态
- 线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的wait方法)
Java中实现公平性方案
线程公平性方案: 使用公平锁下文讲述java实现公平性的方法分享,如下所示:
//一、同步代码块 public class Synchronizer{ public synchronized void doSynchronized(){ //业务代码 } }
以上代码,当有一个以上的线程调用doSynchronized()方法, 在第一个获得访问的线程未完成前, 其他线程将一直处于阻塞状态, 而且在这种多线程被阻塞的场景下, 接下来将是哪个线程获得访问是没有保障的
使用锁方式替代同步块
public class Synchronizer{ Lock lock = new Lock(); public void doSynchronized() throws InterruptedException{ this.lock.lock(); //业务代码 this.lock.unlock(); } } ----------注意事项------- 此处方法doSynchronized() 不再声明为synchronized 而使用lock.lock()和lock.unlock()来替代
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。