家用电脑和宽带做网站,网站搭建环境,网站开发设计培训价格,娄底网站建设开发Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行#xff0c;以及应用场景。
一、应用场景
异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。
以下… Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行以及应用场景。
一、应用场景
异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。
以下以定时任务中for循环的并行操作为例在for循环中应用多线程。
二、实现Runnable接口
Java中的Runnable接口只有一个方法run()实现runnable接口复写run()方法。
示例:
DtoRealtimeThreadTask.java 线程方法
public class DtoRealtimeThreadTask implements Runnable{private IFactoryService factoryService;private RedisCache redisCache;
private RedisTemplate redisTemplate;private int runMinutes;// 重定义构造方法1public DtoRealtimeThreadTask(RedisTemplate redisTemplate , int runMinutes, IFactoryService factoryService , RedisCache redisCache){this.redisTemplate redisTemplate;this.runMinutes runMinutes;this.factoryService factoryService;this.redisCache redisCache;
}// 重定义构造方法2***// 重写run方法Override
public void run() {// run方法中的service、实体类等变量均为本类中的变量不能使用Autowired// 本类中的变量由自定义构造方法传入}} 三、ThreadPoolTaskExecutor调用run方法
ThreadPoolTaskExecutor.excute(a); 示例
定时任务for循环内并行任务使用多线程
for(Object obj : objList){// 1、调用线程构造方法DtoRealtimeThreadTask dtoRealtimeThreadTask new DtoRealtimeThreadTask(redisTemplate,runMinutes,factoryService, redisCache);// 2、执行run方法threadPoolTaskExecutor.execute(dtoRealtimeThreadTask);// 3、附线程执行状态long taskCount threadPoolTaskExecutor.getThreadPoolExecutor().getTaskCount();
long completedCount threadPoolTaskExecutor.getThreadPoolExecutor().getCompletedTaskCount();
if(taskCount - completedCount 1000){logger.info( 线程池活跃线程数量:{}, threadPoolTaskExecutor.getActiveCount());logger.info( 线程池任务数量:{}, taskCount);logger.info( 线程池已完成任务数量:{}, completedCount);logger.info(XXXXXXXXXXXXXXXXXXXXXXXXXXX---- 主线程休眠5秒 ----XXXXXXXXXXXXXXXXXXXXXXXXXXX);try{Thread.sleep(10000);}catch (Exception e){logger.error(e.getMessage());}}