饥饿和公平

java-教程王 Java教程 发布时间:2021-10-18 11:35:16 阅读数:11795 1
下文笔者将讲述java多线程中的“饥饿与公平”的相关知识,如下所示:

Java中饥饿与公平的概念

当一个线程因为CPU时间全部被其他线程获取而无法获取CPU运行时间时,我们将这种状态称之为“饥饿” 此时此线程由于“饥饿”而无法得到运行,下文讲述java中解决饥饿的方法---公平性,如下所示:

Java中产生饥饿的原因

  1. 高优先级线程使用所有的低优先级线程的CPU时间
  2. 线程被永久堵塞在一个等待进入同步块的状态
  3. 线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的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()来替代
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202110/1487.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者