首页 > 其他分享 >生产者消费者模型

生产者消费者模型

时间:2024-07-16 17:57:37浏览次数:11  
标签:消费者 Thread 生产者 模型 InterruptedException queue int new public

生产者消费者模型

 

1. 生产者消费者模型优点

未理解 ! 

 

2. 标准库提供的阻塞队列

查看代码
 
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

class Test {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);

        Thread t1 = new Thread( () -> {
            int count = 0;
            while (true) {
                try {
                    queue.put(count);
                    System.out.println("生产: " + count++);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        Thread t2 = new Thread( () -> {
            while (true) {
                try {
                    System.out.println("消费: " + queue.take());
                    //Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t1.start();
        t2.start();
    }
}

 

 3. 自己写的阻塞队列

重要细节:

1. put、take 操作加锁

2.  由wait()导致进入阻塞的线程, 也可以被interrupt 打断 -> 加 while ()


class MyBlockingQueue {

    public volatile int l;
    public volatile int r;
    public volatile int size;
    public int[] queue;

    public MyBlockingQueue(int n) {
        this.queue = new int[n];
    }

    public void put(int v) throws InterruptedException {
        synchronized (this) {
            while (size >= queue.length) {
                this.wait();
            }
            queue[r] = v;
            r = r == (queue.length - 1) ? 0 : ++r;
            size++;
            this.notify();
        }
    }

    public int take() throws InterruptedException {
        synchronized (this) {
            while (size == 0) {
                this.wait();
            }
            int v = queue[l];
            l = l == (queue.length - 1) ? 0 : ++l;
            size--;

            // 唤醒
            this.notify();
            return v;
        }
    }
}

class Test {
    public static void main(String[] args) {
        MyBlockingQueue queue = new MyBlockingQueue(100);

        Thread t1 = new Thread( () -> {
            int count = 0;
            while (true) {
                try {
                    queue.put(count);
                    System.out.println("生产: " + count);
                    count++;
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        Thread t2 = new Thread(() -> {
            while (true) {
                try {
                    System.out.println("消费 " + queue.take());
                    //Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        t1.start();
        t2.start();
    }
}

 

标签:消费者,Thread,生产者,模型,InterruptedException,queue,int,new,public
From: https://www.cnblogs.com/xumu7/p/18147254

相关文章

  • 学习微调大语言模型 LLM 时的碎碎念
    要完全解决幻觉问题,就要让模型的推理有足够的上下文,而不是凭空编造。这一点需要从训练时就要做到。就是说,例如roleplay的微调,若角色的回复包含了某种状态(天气如何、吃没吃饭等),这些状态不应该是凭空出现的,而是已经出现在上文。我的设想是,模型应当会主动索求状态的说明文字,若没有......
  • HCIE-AI大模型直通车火热报名中
    第一阶段:HCIA-AISolutionArchitect(直播,39课时)该阶段详细介绍AI大模型所需基础技术栈,包含深度学习基础、计算机视觉技术、自然语言处理技术、华为开源深度学习框架MindSpore、注意力制、Transformer架构,并简单介绍华为智算方案、昇腾大模型解决方案。第二阶段:HCIP-AISol......
  • LLM大模型:推理优化-知识蒸馏
      1、有些模型比较大,推理时的效果还不错,但非常耗费计算资源;并且产生token的速度也很慢,大概1秒1个token(我的RAG在最后一步使用的secGPT-13B大概就是这个速度),一个问题回答完毕要耗费分钟级别的时间,用户直接抓狂,继续提升推理的速度!大模型本质是大量的矩阵运算,想要提高效......
  • 北京筑龙入选《2024数字化采购发展报告》,以AI大模型催化采购供应链智能化场景落地
    近日,《2024数字化采购发展报告》(以下简称《报告》)在第五届国有企业数智化采购与智慧供应链高峰论坛上重磅发布。《报告》以“技术变革与价值创造”为主题,展示了生成式人工智能在采购业务中的深入应用,赋能企业实现高效数据分析、精准采购决策与卓越业务管理。北京筑龙凭借《......
  • 三大知名向量化模型比较分析——m3e,bge,bce
    先聊聊出处。M3E是MokaMassiveMixedEmbedding的缩写,Moka,此模型由MokaAI训练,开源和评测,训练脚本使用uniem,评测BenchMark使用MTEB-zhMassive,此模型通过千万级(2200w+)的中文句对数据集进行训练Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功......
  • TaD+RAG-缓解大模型“幻觉”的组合新疗法
    TaD:任务感知解码技术(Task-awareDecoding,简称TaD),京东联合清华大学针对大语言模型幻觉问题提出的一项技术,成果收录于IJCAI2024。RAG:检索增强生成技术(Retrieval-augmentedGeneration,简称RAG),是业内解决LLM幻觉问题最有效的系统性方案。1.背景介绍近来,以ChatGPT为代表的生成式大......
  • 【01】LLaMA-Factory微调大模型——基础环境配置
    为了构建法律领域的垂直应用大模型,从本文起记录使用LLaMA-Factory微调大模型的过程,以期UU们可以复刻与应用。大语言模型统一高效微调框架(LLaMA-Factory)的详解介绍可见:LLaMA-Factory/README_zh.mdatmain·hiyouga/LLaMA-Factory·GitHubLLaMA-Factory框架旨在简化大型语......
  • OpenCompass - 大模型评测
    文章目录一、关于OpenCompass概览组成评测对象工具架构能力维度设计思路通用能力学科综合能力知识能力推理能力理解能力语言能力安全能力评测方法客观评测主观评测(即将发布)特点路线图......
  • 大语言模型 API
    目录大语言模型API(应用程序编程接口)1.大语言模型API的基本概念2.API的作用与重要性3.常见的大语言模型及其API4.如何调用大语言模型API5.API的使用限制与优化6.实际应用案例7.免费与付费API资源总结相关问题OpenAIGPT系列与其他大语言模型API在性能和应用场......
  • (02)Unity使用在线AI大模型(调用Python)
    目录一、概要二、改造Python代码三、制作Unity场景一、概要    查看本文需完成(01)Unity使用在线AI大模型(使用百度千帆服务)的阅读和实操,本文档接入指南的基础上使用Unity+C#调用百度千帆大模型,需要阅读者有一定的Unity开发基础。此功能本质上就是拿Python大模......