生产者与消费者,采用队列方式实现

看,代码

package com.myself;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

class ProducerThread implements Runnable {
	private BlockingQueue<String> blockingQueue;
	private volatile boolean FLAG = true;
	AtomicInteger atomicInteger = new AtomicInteger();

	public ProducerThread(BlockingQueue<String> blockingQueue) {
		this.blockingQueue = blockingQueue;
	}

	@Override
	public synchronized void run() {
		System.out.println("####生产者线程启动成功####");
		try {
			while (FLAG) {
				String data = String.valueOf(atomicInteger.incrementAndGet());
				boolean offer = blockingQueue.offer(data, 2, TimeUnit.SECONDS);
				if (offer) {
					System.out.println("生产者存入成功:" + data);
				} else {
					System.out.println("生产者存入失败:" + data);
					FLAG = false;
				}
				Thread.sleep(5000);//生产一个产品的时间
			}
		} catch (Exception e) {
		}
		System.out.println("生产者线程结束");

	}
}

// 消费者队列
class ConsumerThread implements Runnable {
	private BlockingQueue<String> blockingQueue;
	private volatile boolean FLAG = true;

	public ConsumerThread(BlockingQueue<String> blockingQueue) {
		this.blockingQueue = blockingQueue;
	}

	@Override
	public synchronized void run() {
		System.out.println("#####消费者线程启动了#####");
		while (FLAG) {
			try {
				Thread.sleep(1000);//消费一个产品的时间
				String data = blockingQueue.poll(2, TimeUnit.SECONDS);
				if (data == null) {
					System.out.println("消费者超过两秒没有获取队列的信息");
					FLAG = false;
				}
				System.out.println("消费者消费" + data);

			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("消费者停止");

	}
}

public class Test004 {
	public static void main(String[] args) {
		BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>(8);
		ProducerThread producerThread = new ProducerThread(blockingQueue);
		ConsumerThread consumerThread = new ConsumerThread(blockingQueue);
		Thread thread = new Thread(producerThread);
		Thread thread2 = new Thread(consumerThread);
		thread.start();
		thread2.start();
	}

}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值