功能背景:定时任务处理1万多条数据的经纬度转换成百度的具体明细地址,
每条数据的经纬度调用百度接口,循环处理1万多次
单线程处理需要20分钟,
使用10个线程,2分钟处理完毕
多线程处理过程概述: 利用ExecutorService创建线程池
public class A{
private static final int TOTAL_THREADS = 10;//线程数
public void calculate () {
//线程安全的list
final LinkedBlockingQueue<NbMouldinfoHistory> linkedBlockingQueue = new LinkedBlockingQueue();
list = //数据库中的1万条经纬度数据;
//Executors创建线程池new固定的10个线程
ExecutorService taskExecutor = Executors.newFixedThreadPool(TOTAL_THREADS);
final CountDownLatch latch = new CountDownLatch(list.size());//用于判断所有的线程是否结束
for (int m = 0; m < list.size(); m++) {
final int n = m;//内部类里m不能直接用,所以赋值给n
Runnable run = new Runnable() {
public void run() {
try {
list.get(n);
//处理业务逻辑
linkedBlockingQueue