使用Java实现阻塞队列

1.使用wait和notifyALl实现

class Queue{
    private List<String> data = new ArrayList<>();
    private int maxSize = 10;

    public Queue(int maxSize){
        this.maxSize = maxSize;
    }

    public synchronized void enqueue(String string) throws InterruptedException {
        while(this.data.size() == this.maxSize){
            this.wait(); // 队列已满,阻塞
        }
        if(this.data.size() == 0){ // 队列为空
            this.notifyAll(); // 唤醒所有
        }
        data.add(UUID.randomUUID().toString().substring(0,4));
    }

    public synchronized String dequeue() throws InterruptedException {
        while(this.data.size() == 0){
            this.wait();
        }
        if(this.data.size() == this.maxSize){
            this.notifyAll();
        }
        return data.remove(0);
    }
}
全部评论

相关推荐

废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
买蜜雪也用卷:我觉得应该没有哪个人敢说自己熟练使用git,代码分支一复杂还是得慢慢寻思一下的,不过基本的拉代码提交代码还有分支什么的是应该会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务