700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 生产者消费者3.0 阻塞队列版本

生产者消费者3.0 阻塞队列版本

时间:2021-07-12 14:43:37

相关推荐

生产者消费者3.0 阻塞队列版本

import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/*** 描述:生产者消费者 3.0 阻塞队列 版** @author 小纸人* @create -07-31 22:05* <p>* 使用的技术 :* volatile、CAS、atomicInteger、BlockQueue、线程交互、原子引用*/class MyResource {private volatile boolean FLAG = true; //默认开启,生产 + 消费private AtomicInteger atomicInteger = new AtomicInteger();BlockingQueue<String> blockingQueue = null;public MyResource(BlockingQueue<String> blockingQueue) {this.blockingQueue = blockingQueue;System.out.println("使用了:" + blockingQueue.getClass().getName());}public void myProd() throws Exception {String data = null;boolean returnVal = false;while (FLAG) {data = atomicInteger.incrementAndGet() + "";returnVal = blockingQueue.offer(data, 2L, TimeUnit.SECONDS);if (returnVal) {System.out.println(Thread.currentThread().getName() + "\t 插入队列" + data + "成功");} else {System.out.println(Thread.currentThread().getName() + "\t 插入队列" + data + "失败");}//一秒钟生产一次TimeUnit.SECONDS.sleep(1);}System.out.println(Thread.currentThread().getName() + "\t FLAG = false,生产结束");}public void myConsumer() throws Exception {String result = null;while (FLAG) {result = blockingQueue.poll(2L, TimeUnit.SECONDS);if (null == result || result.equalsIgnoreCase("")) {System.out.println(Thread.currentThread().getName() + "\t 超过2秒没有消费。消费退出");return;}System.out.println(Thread.currentThread().getName() + "\t 消费" + result + "成功");}}public void stop() {this.FLAG = false;}}public class Version3_0 {public static void main(String[] args) {MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));new Thread(() -> {System.out.println("生产者线程启动");try {myResource.myProd();} catch (Exception e) {e.printStackTrace();}}, "Prod").start();new Thread(() -> {System.out.println("消费者线程启动");try {myResource.myConsumer();} catch (Exception e) {e.printStackTrace();}}, "Consumer").start();//暂停一会线程try { TimeUnit.SECONDS.sleep(5); } catch (Exception e) { e.printStackTrace(); }System.out.println();System.out.println("5秒钟时间到!活动结束");myResource.stop();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。