首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

定时实施多线程任务

2012-09-15 
定时执行多线程任务如何才能做到,定时启动某一个任务,比如三分钟做一次该任务,目前我用的是spring结合quar

定时执行多线程任务

如何才能做到,定时启动某一个任务,比如三分钟做一次该任务,目前我用的是spring结合quartz实现了该功能

?

但是,我执行的那个任务的是多线程的,这样会导致什么问题呢,当三分钟到了会自动启动下一个任务,或许你会说concurrent可以控制,可是你错了,前几天我也这么天真的以为是,但是事实不是这样的。

?

我想达到的目的是,下一个任务的启动要看前面那个任务是否结束,而不会三分钟就起来一次,现在碰到的问题是当这个任务不是多线程时,是的会等待前面那个任务执行完毕,然后再起来,可是现在我想用多线程来实现这个任务,这条路还能走通吗?

?

或者是不是应该换其他的一种方法呢?

?

各位高手能不能给一点解决思路啊。

?

------------------------

?

这个问题已经解决了,感谢下我们同事达人,提供了点思路

package com.hundsun.mailBox.run;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.log4j.Logger;import org.springframework.stereotype.Component;import com.hsipcc.util.PropertyUtil;/** * 该自动服务入口类 *  *  *  */@Componentpublic class CycleSearch {/** * 该自动服务入口 函数 *  */private static final Logger logger = Logger.getLogger(CycleSearch.class);public static int i = 0;//用来标识还在跑的线程数public void doIt() {if (i == 0) {//当线程为0的时候启动服务// 16101服务// EmlThread emlThread1 = new EmlThread("16101");// Thread t1 = new Thread(emlThread1);// 16009服务// EmlThread emlThread2 = new EmlThread("16009");// Thread t2 = new Thread(emlThread2);// 16301服务// EmlThread emlThread3 = new EmlThread("16301");// Thread t3 = new Thread(emlThread3);// t1.start();// t2.start();// t3.start();// emlThread1.run();// emlThread2.run();// emlThread3.run();ExecutorService exec = Executors.newFixedThreadPool(5);String service_ids = "16009,16101,16301";String service_id[] = service_ids.split(",");for (int j = 0; j < service_id.length; j++) {i++;exec.execute(new EmlThread(service_id[j]));}} else {logger.info("还有"+i+"个线程在跑请等待");}}}

?以前我把i--放那个doIt里面,后来发现没意义,因为这个不是循序执行的,在线程没跑完就做i--了

所以可以解释为什么concurrent好像是无效的,因为其实这个程序已经跑完了,只是线程还在跑,而他才不管这个呢,古下个三分钟到了任务就启动了,现在设置一个static变量i,标识进程数,如果不为0,说明没跑完,在每一个线程结束前来个CycleSearch.i--;,这也是为什么我设置i为public这也就达到了等待线程全部跑完的目的了

?

?

?

这里还有一个问题newFixedThreadPool的参数5是什么意思啊,如果service_id.length变大了写个5放哪里有影响吗?

热点排行