应用场景
数据库里有1120万条数据需要一个不漏的全部处理,然后将处理后的数据再次保存在数据库中。如果数据量小的话,取出来后挨个处理挨个进行保存即可,此时我们面对的是千万级别的大批量的数据,挨个处理挨个保存这种顺序方法非常耗时,不可行。
方法使用
此时可以选择一个生产者和消费者思路进行处理,如下图顺序方法和生产者消费者方法的对比。
顺序执行的耗时模型处理数据处理数据完成后才可以执行保存数据,耗时是叠加;生产消费方法执行耗时是生产数据和消费数据方法并行的执行状态,消耗时间取决于哪个最后执行完成(此图中生产数据执行时间最长)。
首先创建线程安全的队列,用于生产者和消费者的数据传递。生产者在处理完成一条数据后,把数据放入队列中,消费者不断的检查队列中是否存在数据,如果存在数据就进行取出处理后保存。
private Queue<RelateCountMatrixEntity> queue = new ConcurrentLinkedQueue<>(