线程池的应用场景【1】
场景:数据更新
待更新的数据较多,分布在多个mysql数据表中
准备:构造线程池
public class ThreadPoolManager { private final static int CORE_POOL_SIZE = 4; final static RejectedExecutionHandler HANDLER = (r, executor) -> System.out.println("工作队列被拒绝"); public static final ThreadPoolExecutor THREAD_POOL = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SEConDS , new ArrayBlockingQueue(WORK_QUEUE_SIZE), HANDLER); }
返回对象:
public class KeyInfoVO { public static final KeyInfoVO EMPTY = new KeyInfoVO (); private Integer UserId = 0; private Integer UserHomeId = 0; private Integer UserOtherId = 0; private Integer UserWorkId = 0; }
入参:
public class CompleteKeyInfo implements Serializable { public static final KeyInfo EMPTY = new KeyInfo(); private Integer type; @ApiModelProperty("用户基本信息") private UserInfo userInfo ; @ApiModelProperty("用户家庭信息") private UserHomeInfo userHomeInfo ; @ApiModelProperty("用户其他信息") private UserOtherInfo userOtherInfo ; @ApiModelProperty("用户工作信息") private UserWorkInfo userWorkInfo ; }
具体使用场景:
利用多线程去更新数据
private static final Integer LATCH_COUNT = 4; public KeyInfoVO modify(KeyInfo keyInfo) throws Exception { KeyInfoVO vo = new KeyInfoVO(); final CountDownLatch latch = new CountDownLatch(LATCH_COUNT); ThreadPoolManager.THREAD_POOL.execute(() -> { Integer integer = userService.modify(keyInfo.getUserInfo()); System.out.printf("--------------------"+integer); vo.setUserId(integer); latch.countDown(); }); ThreadPoolManager.THREAD_POOL.execute(() -> { Integer integer = UserHomeService.modify(keyInfo.getUserHomeInfo ()); vo.setUserHomeId (integer); latch.countDown(); }); ThreadPoolManager.THREAD_POOL.execute(() -> { Integer integer = UserOtherService.modify(keyInfo.getUserOtherInfo ()); vo.setUserOtherId (integer); latch.countDown(); }); ThreadPoolManager.THREAD_POOL.execute(() -> { Integer integer = UserWorkI.modify(keyInfo.getUserWorkInfo ()); vo.setUserWorkId (integer); latch.countDown(); }); latch.await(20, TimeUnit.SECONDS); return vo; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)