1.协调生产/消费的要求我们手写一个ArrayBlockingQueue。JDK其实已经有了这个类,是基于Lock锁和Condition锁信号实现的。当然,JDK的实现代码非常复杂,包括更严格的逻辑检查,从性能优化的角度也做了更多的工作。在本文中,我们只是简单的实现了它的核心逻辑:在初始化构造ArrayBlockingQueue时,指定最大容量限制,并提供put方法。当达到Queue队列的最大容量限制时,产生数据的线程就会被阻塞。put方法产生数据后,队列一定不能为空,通知消费者线程消费。提供take方法,当Queue队列容量为0时,阻塞消费数据的线程。take方法执行完后,肯定队列没有满,通知生产者线程生产。一条数据只能取一次。取出后,数据从队列中删除。相信上面的逻辑实现之后,你一定已经掌握了java并发编程的Lock锁和Condition锁信号吧!其实这个逻辑基本上就是kafka生产者客户端缓冲队列和批量数据传输的实现逻辑。不同的是take方法是一次性取出buffer中的所有数据,而本文的take方法是一次取出一条数据。2.构造方法构造队列的方法很简单。使用List作为数据存储队列,并指定其容量。至此我们还没有实现容量判断和阻塞线程的功能。//类成员变量-存储数据的队列privateList