美文网首页
使用显示条件变量的有界缓存

使用显示条件变量的有界缓存

作者: _CloudNine | 来源:发表于2017-04-18 20:13 被阅读23次

通过使用reetrantlock和condition实现的有界缓存。

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by hybian on 2017/4/18.
 */

public class ConditionBoundedBuffer<T> {
    private int tail, head, count;
    private final int BUFFER_SIZE;
    private final T[] items;
    protected final Lock lock = new ReentrantLock();
    //条件谓词
    private final Condition notFull = lock.newCondition();
    private final Condition notEmpty = lock.newCondition();
    public ConditionBoundedBuffer(int buffer_size) {
        this.BUFFER_SIZE = buffer_size;
        items = (T[])new Object[BUFFER_SIZE];
    }
    //阻塞直到notFull
    public void put(T x) throws InterruptedException {
        lock.lockInterruptibly();
        try {
            while (count == items.length)
                notFull.await();
            items[tail] = x;
            if (++tail == items.length)
                tail = 0;
            ++count;
            notEmpty.signal();
        }finally {
            lock.unlock();
        }
    }
    public T take() throws InterruptedException {
        lock.lockInterruptibly();
        try {
            while (count == 0)
                notEmpty.await();
            T x = items[head];
            items[head] = null;
            if (++head == items.length)
                head = 0;
            --count;
            notFull.signal();
            return x;
        }finally {
            lock.unlock();
        }
    }
}

相关文章

  • 使用显示条件变量的有界缓存

    通过使用reetrantlock和condition实现的有界缓存。

  • SDWebImage框架的基本使用

    基本使用 1)下载图片并显示(内存缓存&磁盘缓存) 2)下载图片显示并计算下载进度(内存缓存&磁盘缓存&下载进度)...

  • 高效jquery的tips

    1、缓存变量dom遍历是昂贵的,尽量把重用的变量缓存 2、避免全局变量最好确保你的变量在函数作用域内 3、使用匈牙...

  • Shell命令

    bash   bash是lunix默认使用的shell 变量的显示与设置 变量的显示:echo变量在显示时,前面必...

  • 电商项目(四)

    一、缓存 我们知道使用缓存,可以提高查询效率,那什么情况下需要使用缓存呢?通常而言,使用缓存需满足以下两个条件: ...

  • JavaScript - 容易引发内存使用不当的情景

    滥用全局变量解决办法:如果避免不了使用全局变量,记得使用后释放 缓存不限制解决办法:限制缓存大小,超过限制后先出后...

  • Linux系统编程—条件变量

    条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用。条件变量之所以要和互斥锁一起使用,主要是因为互斥...

  • 一句话

    在getview中使用if 必须也使用else 否则会有界面显示问题 通过Android Studio编译器获取S...

  • APUE//线程同步3

    使用条件变量进行线程同步 barrier,屏障

  • Glide 图片库原理(三)缓存机制

    缓存机制 查找缓存使用 先到活动缓存查找,如果有直接返回显示 如果活动缓存没有,那么去LRU内存缓存查找,如果有那...

网友评论

      本文标题:使用显示条件变量的有界缓存

      本文链接:https://www.haomeiwen.com/subject/bmeqzttx.html