线程池使用三

demo1

public ResultVo insertBatch() {

        long startTime = System.currentTimeMillis();

        ExecutorService executor = Executors.newFixedThreadPool(6);

        for (int i = 0; i < 1000; i++) {

            DmDatasourceEntity entity = new DmDatasourceEntity();

            entity.setName("name" + i);

            entity.setType("pgsql");

            // dmDatasourceDao.insert(entity);

            executor.submit(() -> {

                dmDatasourceDao.insert(entity);

            });

        }

        long endTime = System.currentTimeMillis();

        logger.info("执行时间====================s" + (endTime - startTime) / 1000);

        return ResultVo.success(null);

    }

demo2   Executors 创建线程池不推荐 

public static void main(String[] args)throws IOException, InterruptedException {

// 启动线程池

    ExecutorService executorService =

new ThreadPoolExecutor(4,16,300, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),

Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

CountDownLatch countDownLatch =new CountDownLatch(1000);

for (int i =0; i <1000; i++) {

executorService.submit(() -> {

// 线程任务执行代码

            System.out.println(Thread.currentThread().getName());

// 线程计数器

            countDownLatch.countDown();

});

}

//等待任务执行完成

    countDownLatch.await();

executorService.shutdown();

System.out.println("执行完成");

}


public static void main(String[] args)throws IOException, InterruptedException {

// 启动线程池

    ExecutorService executorService =

new ThreadPoolExecutor(4, 16, 300, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());

CountDownLatch countDownLatch =new CountDownLatch(1000);

for (int i =0; i <1000; i++) {

executorService.submit(() -> {

// 线程任务执行代码

            System.out.println(Thread.currentThread().getName());

// 线程计数器

            countDownLatch.countDown();

});

}

// 等待任务执行完成

    countDownLatch.await();

executorService.shutdown();

System.out.println("执行完成");

}


demo3 带返回值使用

public static void main(String[] args)throws IOException, InterruptedException, ExecutionException {

// 启动线程池

    ExecutorService executorService =

new ThreadPoolExecutor(4, 16, 300, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());

CountDownLatch countDownLatch =new CountDownLatch(1000);

List> list = Lists.newArrayList();

for (int i =0; i <1000; i++) {

int j = i;

Future fut = executorService.submit(() -> {

// 线程任务执行代码

            System.out.println(Thread.currentThread().getName());

// 线程计数器

            // countDownLatch.countDown();

            return j;

});

list.add(fut);

}

System.out.println("执行完成1");

// 等待任务执行完成

    // countDownLatch.await();

// executorService.shutdown();

    for (Future li : list) {

System.out.println(li.get());

}

System.out.println("执行完成2");

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容