标签:Thread 队列 getName System 阻塞 生产者 println blockingQueue out
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(); } }
标签:Thread,队列,getName,System,阻塞,生产者,println,blockingQueue,out 来源: https://www.cnblogs.com/upupup-999/p/15949587.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。