定时执行多线程任务

如何才能做到,定时启动某一个任务,比如三分钟做一次该任务,目前我用的是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;

/**
 * 该自动服务入口类
 * 
 * 
 * 
 */
@Component
public 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放哪里有影响吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值