生产者-消费者

生产者-消费者

class Message {
	 private int id;
	 private Object message;
	 public Message(int id, Object message) {
		 this.id = id;
		 this.message = message;
	 }
	 public int getId() {
	 	return id;
	 }
	 public Object getMessage() {
	 	return message;
 	 }
}

class MessageQueue {
	 private LinkedList<Message> queue;
	 private int capacity;
	 public MessageQueue(int capacity) {
		 this.capacity = capacity;
		 queue = new LinkedList<>();
	 }
	 public Message take() {
		 synchronized (queue) {
			 while (queue.isEmpty()) {
				 log.debug("没货了, wait");
				 try {
					 queue.wait();
				 } catch (InterruptedException e) {
					 e.printStackTrace();
			 	 }
			 }
			 Message message = queue.removeFirst();
			 queue.notifyAll();
			 return message;
	 	}
	 }
	 public void put(Message message) {
			 synchronized (queue) {
			 while (queue.size() == capacity) {
			 	log.debug("库存已达上限, wait");
				try {
				 	queue.wait();
			 	} catch (InterruptedException e) {
				 	e.printStackTrace();
			 	}
			 }
			 queue.addLast(message);
			 queue.notifyAll();
	 	}
	 }
}


//main方法
MessageQueue messageQueue = new MessageQueue(2);
// 4 个生产者线程, 下载任务
for (int i = 0; i < 4; i++) {
	 int id = i;
	 new Thread(() -> {
		 try {
			 String response = new String("测试" + id);
			 messageQueue.put(new Message(id, response));
		 } catch (IOException e) {
		 	e.printStackTrace();
		 }
	 }, "生产者" + i).start();
}

new Thread(() -> {
	 while (true) {
		Message message = messageQueue.take();
		List<String> response = (List<String>) message.getMessage();
	 }
}, "消费者").start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值