定时任务及多线程配置xml
定时任务JAVA类
RuleService.java
@Servicepublic class RuleService { public void updateRule(){ System.out.println("定时任务启动"); }}
多线程配置
StartTaskThread.java
public class StartTaskThread implements Runnable { private Listlist; public StartTaskThread(List list) { this.list= list; } @Override public synchronized void run() { System.out.println(list.size()); }}
修改定时任务类,分配数据,并发布到各个线程里。
RuleService.java
@Servicepublic class RuleService { public void updateRule(){
int nums = 5;//开启5线程 ListstrList= new ArrayList (); for (int i = 0; i < 2000; i++) { strList.add("test"+i); } Map > map = new HashMap >(); for (int i = 0; i < nums; i++) { List list = new ArrayList (); map.put(i, list); } int st = 0; //起点 int avg = strList.size()/nums; //平均值 int count =0;//记录值 for (int i = 0; i < nums; i++) { if(i==nums-1){ for (int j = count; j
new Thread(new StartTaskThread(map.get(i)).start();
} }
取线程配置工具类,如果线程内需要操作DAO 则需要主动获取spring注入的DAO类的Bean
ContextUtil.java
import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;public class ContextUtil implements ApplicationContextAware{ private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static ApplicationContext getContext(){ return context; } public static Object getBean(String beanName) { return context.getBean(beanName); }}
获取dao写法
RuleDAO ruleDAO =(RuleDAO) ContextUtil.getBean("ruleDAO");
使用线程池
StartTaskThread2.java
public class StartTaskThread implements Runnable { private String st; public StartTaskThread(String st) { this.st= st; } @Override public void run() { System.out.println(st); }}
线程池
RuleService2.java
@Servicepublic class RuleService { public void updateRule(){ ThreadPoolTaskExecutor tpte =(ThreadPoolTaskExecutor)ContextUtil.getBean("threadPoolTaskExecutor");
ListstrList= new ArrayList (); for (int i = 0; i < 2000; i++) { strList.add("test"+i); }
for (int i = 0; i < strList.size(); i++) { tpte.execute(new StartTaskThread2(strList.get(i))); }
}