线程池调用实例ThreadPoolExecutor

package org.song.spike.sso.service;

import lombok.extern.slf4j.Slf4j;
import org.song.spike.sso.entity.SysMenu;
import org.song.spike.sso.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.*;

@Service
@Slf4j
public class ThreadPoolService {
    @Autowired
    private SysMenuService sysMenuService;
    @Autowired
    private SysUserService sysUserService;
    private final static ArrayBlockingQueue<Runnable> WORK_QUEUE = new ArrayBlockingQueue<>(9);

    private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();
    private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(16, 16, 1000, TimeUnit.MILLISECONDS, WORK_QUEUE, HANDLER);

    public void testConcurrent() throws ExecutionException, InterruptedException {

            executorService.execute(()->{
                // 异步执行
                try {
                    Long begin = System.currentTimeMillis();
                    System.out.println("异步开始");
                    Thread.sleep(5000);
                    log.info("异步执行时间{}", System.currentTimeMillis() - begin);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            log.info("异步外开始");
            Long begin = System.currentTimeMillis();
            Callable<List> menuListCallable = () -> sysMenuService.getAllMenu();
            Callable<List> userListCallable = () -> sysUserService.getAllUser();
            FutureTask<List> menuListTask = new FutureTask<>(menuListCallable);
            FutureTask<List> userListTask = new FutureTask<>(userListCallable);
            int activeCount = executorService.getActiveCount();
            log.info("活跃数 {}",activeCount);
            executorService.submit(menuListTask);
            executorService.submit(userListTask);
            System.out.println(menuListTask.get().size());
            System.out.println(userListTask.get().size());
            log.info("时间: {}", System.currentTimeMillis() - begin);
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值