1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 多线程+阻塞队列实现生产者和消费者

多线程+阻塞队列实现生产者和消费者

时间:2024-04-30 23:52:26

相关推荐

多线程+阻塞队列实现生产者和消费者

1、需求:

一个线程生产数据,一个线程消费数据。

使用多线程和阻塞队列。

语言 方法

4153 y54LJMMQU5

0Yyw2软件赚钱

5825 .01.05 13-04-42

2、代码

package com.test.queue;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ConsumerProducerUsingBlockingQueue { /** * 阻塞队列: * 在试图向一个满对列添加元素或者从空队列中删除元素时会导致线程阻塞。 * 阻塞队列包含:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue */ private static ArrayBlockingQueue blockingQueue= new ArrayBlockingQueue<>(2); public static void main(String[] args) { /** * new CachedThreadPool() :创建一个线程池,它会在必要的时候创建新的线程,如果之前创建的线程 * 可用,则先重用之前创建的线程。 */ //创建一个最大线程数为2的线程池 ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.execute(new Consumer()); executorService.execute(new Producer()); executorService.shutdown(); //##关闭执行器,但是允许执行器中的任务执行完,一旦关闭则不接受新的任务。 } private static class Consumer implements Runnable{ @Override public void run() { try{ while (true){ System.out.println("消费数据:"+blockingQueue.take()); } }catch (Exception e){ e.printStackTrace(); } } } private static class Producer implements Runnable{ @Override public void run() { try{ int i=1; while(true){ System.out.println("生产数据:"+i); blockingQueue.put(i++); Thread.sleep((int)(Math.random()*10000)); } }catch (Exception e){ e.printStackTrace(); } } }}

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