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);
}
}
线程池调用实例ThreadPoolExecutor
最新推荐文章于 2023-11-01 16:21:51 发布