最近写书写到了influxdb,为此开发了一个数据采集、中转、流计算的Java案例程序,当做到中转和流计算的交互时,我用了两个线程和一个队列,也就是中转线程写add队列,流计算线程取poll队列,由于双方线程都是while(true),为了能达到队列没有数据就等待的效果,我又在双方线程中都搞了队列同步块、线程wait休眠和线程notifyALL唤醒,以达到双方唤醒和休眠互为切换,本质上形成了一边忙的时候,另一边就阻塞的效果。当我志得意满的截了代码图给我的老朋友看到时候,他说:“没必要,队列用阻塞队列就行了,中转写队列用put,流计算取队列用take,线程阻塞过程让队列内部自己解决,比你自己写地要好得多。”我听后就知道自己有多平庸了!瞬间被秒的感觉,按照阻塞队列的思路,代码中取消了一堆自己写得线程操作,不仅简洁,而且测试后,性能提升了不小。我的思路必须是一次批量写入队列多条,性能才会提升,而队列阻塞模式是只要消费端在队列中拿不到就一直阻塞等待,生产端完全不用顾及一次给队列批量写多少,这样就完全解放了生产端,完美符合我预期的目的。总之,又深刻认识了那个道理,尽量用人家官方写好的组件,别自己重新发明轮子。