• CompletableFuture保证线程同步


    目的:多线程执行某些任务,把执行完的结果放到list中,最后返回list。

    1、list要保证线程安全

    2、要等所有的线程都执行完,才能返回list

    3、异常处理,若其中某个线程出现了异常,会导致其线程卡死,必须进行try-catch包裹

    package com.thread;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.CopyOnWriteArrayList;
    import java.util.concurrent.Future;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    public class ThreadPoolTest {
        public static  ThreadPoolExecutor pool = new ThreadPoolExecutor(
                5,10,200, TimeUnit.MILLISECONDS,  new ArrayBlockingQueue<Runnable>(10));
    
        public static void main(String[] args) {
    // 写加锁,读不加锁 List
    <String> list = new CopyOnWriteArrayList<>(); List<CompletableFuture> cfs = new ArrayList<>(); for (int i = 0; i < 10; i++) { Map<String, Integer> params = new HashMap<>(); params.put("i", i); CompletableFuture cf = CompletableFuture.runAsync(() -> {
              try { String value
    = String.format("thread: %s, i = %s", Thread.currentThread().getName(), params.get("i")); System.out.println(value); list.add(params.get("i").toString());
    } catch(Exception e) {
              // 在不能保证代码一定不会出现异常的情况下,必须进行try-catch处理
    } }, pool); cfs.add(cf); }
    // 等待所有线程执行完 CompletableFuture.allOf(cfs.toArray(
    new CompletableFuture[1])).join(); System.out.println(list); pool.shutdown(); } }

    runAsync类似于execute方法,不支持返回值,而supplyAsync方法类似submit方法,支持返回值。

    没有指定Executor的方法会使用ForkJoinPool.commonPool() 作为它的线程池执行异步代码。

  • 相关阅读:
    利用jQuery Ajax技术实现每隔5秒向某页面传值
    POJ 题目2761 Feed the dogs(主席树||划分树)
    【翻译自mos文章】将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边
    【算法拾遗】最大数和最小数
    WinMain和MFC的差别
    3.1 The Interpolating Polynomial(站点)
    在VS中设置比较和谐的字体和颜色的方法
    获取微信服务器IP地址
    关于bcg库记忆界面的问题及其解决办法
    Objective-C基础笔记(8)Foundation常用类NSString
  • 原文地址:https://www.cnblogs.com/wwzyy/p/12659363.html
Copyright © 2020-2023  润新知