根据条件终止调度任务

原文链接:https://blog.youkuaiyun.com/yeshenrenjin/article/details/44488755
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * ScheduledExecutorService 根据条件终止调度任务
 * @author gzn
 */
public class ScheduleInnerShutdown implements Runnable {

	@SuppressWarnings("rawtypes")
	private ConcurrentHashMap<String, Future> futureMap = new ConcurrentHashMap<String, Future>();
	private int count = 0;
	private String jobId;
	
	@SuppressWarnings("rawtypes")
	public ScheduleInnerShutdown(String jobId,ConcurrentHashMap<String, Future> futureMap) {
		this.jobId = jobId;
		this.futureMap = futureMap;
	}

	@SuppressWarnings("rawtypes")
	@Override
	public void run() {
		System.out.println("ScheduleInnerShit : " + jobId + "---" + count);
		count++;
		if(count > 9){
			try {
				// 在此处抛出异常,若不捕获,线程也会停止
				Future future = futureMap.remove(jobId);
				future.cancel(true);
			}finally {
				System.out.println("jobId " + jobId + " had cancle!");
			}
		}
	}
	
	@SuppressWarnings("rawtypes")
	public ConcurrentHashMap<String, Future> getFeatureMap() {
		return futureMap;
	}

	@SuppressWarnings("rawtypes")
	public void setFeatureMap(ConcurrentHashMap<String, Future> featureMap) {
		this.futureMap = featureMap;
	}

	public String getJobId() {
		return jobId;
	}

	public void setJobId(String jobId) {
		this.jobId = jobId;
	}
	
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws InterruptedException {
		ConcurrentHashMap<String, Future> futureMap = new ConcurrentHashMap<String, Future>();
		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);
		
		ScheduleInnerShutdown jobTest = new ScheduleInnerShutdown("jobTest_1", futureMap);
		Future future = scheduler.scheduleAtFixedRate(jobTest, 0, 1, TimeUnit.SECONDS);
		futureMap.put(jobTest.getJobId(), future);
		
		ScheduleInnerShutdown job_2 = new ScheduleInnerShutdown("jobTest_2", futureMap);
 
		Future future_2 = scheduler.scheduleAtFixedRate(job_2, 5, 1, TimeUnit.SECONDS);
		futureMap.put(job_2.getJobId(), future_2);
		
		Thread.sleep(20000);
		
		System.out.println("test over");
		scheduler.shutdown();

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值