package com.atgu; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; class MyResource{ private volatile boolean FLAG=true; AtomicInteger atomicInteger=new AtomicInteger(); BlockingQueue<String> blockingQueue=null; public MyResource(BlockingQueue<String> blockingQueue) { this.blockingQueue = blockingQueue; System.out.println("传入了---"+blockingQueue.getClass().getName()); } public void myProducer() throws Exception{ String date=null; boolean retVal; while (FLAG){ date=atomicInteger.incrementAndGet()+""; retVal=blockingQueue.offer(date,2L,TimeUnit.SECONDS); if (retVal) { System.out.println(Thread.currentThread().getName()+date+" 插入成功"); } else { System.out.println(Thread.currentThread().getName()+date+" 插入失败"); } try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + "\t 停止生产,表示FLAG=false,生产结束"); } public void myConsumer() throws Exception{ String result=null; while (FLAG){ result=blockingQueue.poll(2,TimeUnit.SECONDS); if (result!=null&&result!="") { System.out.println(Thread.currentThread().getName()+result+" 取出成功"); } else { FLAG=false; System.out.println(Thread.currentThread().getName()+"\t消费失败,队列中已为空,退出"); return; } } } public void stop(){ FLAG=false; } } public class ProducerConsumerWithBlockingQueueDemo { public static void main(String[] args) { MyResource myResource = new MyResource(new ArrayBlockingQueue<String>(10)); new Thread(()->{ System.out.println(Thread.currentThread().getName() + "\t 生产线程启动\n\n"); try { myResource.myProducer(); } catch (Exception e) { e.printStackTrace(); } },"producer").start(); new Thread(()->{ System.out.println(Thread.currentThread().getName() + "\t 消费线程启动\n\n"); try { myResource.myConsumer(); } catch (Exception e) { e.printStackTrace(); } },"consumer").start(); try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("\n\n5秒中后,生产和消费线程停止,线程结束"); myResource.stop(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!