多线程拆分任务学习

package com.pendanaan.utils;

import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class Test {

// 20个线程一起跑
private static ExecutorService executorService = Executors.newFixedThreadPool(20);

public static void main(String[] args) throws InterruptedException {
    CountDownLatch countDownLatch = new CountDownLatch(5);

    //当前时间
    Date now  = new Date();



    List<Date> list = Collections.synchronizedList(new ArrayList<>());

	//拆分任务   为 5个任务
    for(int j = 1 ; j <= 5; j ++){
        int finalJ = j;


            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                    //定义每个任务的分层次,  第一个任务 当前时间 +1 +2 一直到+9
                    //第二个任务  当前时间 +10  +11 一直到 +19
                    //第五个任务 +40 一直到 +49
                    //一共五个任务  中间可以进行数据库操作  countDownLatch 等待任务结束
                        for(int i = (finalJ -1)*10; i < (finalJ *10) ; i++){
                            Calendar instance = Calendar.getInstance();
                            instance.clear();
                            instance.setTime(now);
                            instance.add(Calendar.DATE, i);
                            Date time = instance.getTime();
                            list.add(time);
                            System.out.println(Thread.currentThread().getName()+","+i+","+time);
                        }

                    }finally {
                        countDownLatch.countDown();
                    }
                }

            });



    }





    countDownLatch.await();

    System.out.println("结束");
    System.out.println(countDownLatch.getCount());
}

}

发布了64 篇原创文章 · 获赞 11 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Summer_i/article/details/104758709