CompletableFuture implementa asíncrono y bloques para obtener el resultado de retorno, use hábilmente el valor de retorno de CompletableFuture para resolver cuellos de botella de rendimiento, grupo de subprocesos, disposición asíncrona

CompletableFuture implementa asíncrono y bloques para obtener el resultado de retorno, use hábilmente el valor de retorno de CompletableFuture para resolver cuellos de botella de rendimiento, grupo de subprocesos, disposición asíncrona

Referencia: https://blog.csdn.net/LUOHUAPINGWIN/article/details/122222011
      https://blog.csdn.net/sunquan291/article/details/103991184
      
      
Colocación: 
gulimall.thread.coreSize=20
gulimall.thread.maxSize =200
guilimall.thread.keepAliveTime=10

Leer configuración:
paquete com.xunqi.gulimall.order.config;

importar lombok.Datos;
importar org.springframework.boot.context.properties.ConfigurationProperties;

 / **
 * @Descripción: * @Creado  :
 con IntelliJ IDEA  .


@ConfigurationProperties(prefijo = "gulimall.thread")
// @Component
@Data
public class ThreadPoolConfigProperties {

    tamaño de núcleo privado entero;

    Tamaño máximo de número entero privado;

    privado Entero keepAliveTime;


}


Grupo de subprocesos de inyección:
paquete com.xunqi.gulimall.order.config;

importar org.springframework.boot.context.properties.EnableConfigurationProperties;
importar org.springframework.context.annotation.Bean;
importar org.springframework.context.annotation.Configuration;

importar java.util.concurrent.Executors;
importar java.util.concurrent.LinkedBlockingDeque;
importar java.util.concurrent.ThreadPoolExecutor;
importar java.util.concurrent.TimeUnit;

/**
 * @Descripción: clase de configuración del grupo de subprocesos
 * @Creado: con IntelliJ IDEA
 * @autor: Xia Mo Zhishui
 * @createTime: 2020-06-23 20:24
 **/

@EnableConfigurationProperties(ThreadPoolConfigProperties.class)
@Configuration
public class MyThreadConfig {


    @Bean
    public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool) {         devuelve nuevo ThreadPoolExecutor(                 pool.getCoreSize(),                 pool.getMaxSize(),                 pool.getKeepAliveTime(),                 TimeUnit.SECONDS,                 new LinkedBlockingDeque<>(100000),                 Executors.defaultThreadFactory(),                 nuevo ThreadPoolExecutor.AbortPolicy()         );     }









}


Uso:
    @Autowired
    privado ThreadPoolExecutor threadPoolExecutor;
    
    
     @Override
    public List<WxUserInfo> getWxUserInfoByUid(String appid, List<Long> uidList) {         // Demasiados datos Fragmento de ejecución         List<List<Long>> uidListGroupList = CollectionUtil.split(uidList, 500);

        List<FuturoCompletable<Lista<WxUserInfo>>> futuros = uidListGroupList.stream().map(lista -> {             return CompletableFuture.supplyAsync(() -> {                 RestResult<List<WxUserInfo>> wxUserInfoByAppIdUid = pasaporteFeignService.getWxUserInfoByAppIdUid(appid, list , appName);                 return wxUserInfoByAppIdUid.getData();             }, threadPoolExecutor);         }).collect(Collectors.toList());




        // List<WxUserInfo> collect = futures.stream().map(p -> {         // try {         // return p.get();         // } catch (InterruptedException e) {         // e.printStackTrace();         // } catch (ExecutionException e) {         // e.printStackTrace();         // }         // devuelve nulo;         // }).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors. Listar());








        List<WxUserInfo> biddingList = futures.stream().map(CompletableFuture::join).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList());
        volver lista de ofertas;
    }

Guess you like

Origin blog.csdn.net/zhongguowangzhan/article/details/128433909