怎么实现MainStarter

本篇内容主要讲解“怎么实现MainStarter”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现MainStarter”吧!

创新互联公司专注于企业成都全网营销推广、网站重做改版、湘潭网站定制设计、自适应品牌网站建设、H5开发商城网站定制开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为湘潭等各大城市提供网站开发制作服务。

Quartz触发器配置

从触发器中配置一个通用触发MainStarter



    

	
	
	


	
	
	 

	

	
		
			  
		
	

统一任务处理

MainStarter的实现

主要是任务中心来执行的

public class MainStarter{

	// 任务中心
	private TaskCenter taskCenter;
	
	public void setTaskCenter(TaskCenter taskCenter) {
		this.taskCenter = taskCenter;
	}

	public void run() {
		if(taskCenter==null) {
			taskCenter = new TaskCenterSupport();
		}
		taskCenter.run();
	}
}
public interface TaskCenter {
	// 加载任务
	public void loadTask(Task taskTracker);
	
	public List getTasks(); 
	
	public void run();
	
	public void terminate();
	
}

任务中心存储任务,任务 Task 为代码最终执行

public abstract class Task extends Thread {
	private boolean isAlive = true;

	@Override
	public void run() {
		while (isAlive) {
			try {
				doRun();
			} catch (Exception e) { 
				logger.error("run task error.", e);
			}
		}
	}

	public void setAlive(boolean isAlive) {
		this.isAlive = isAlive;
	}

	// 子类业务需要实现此方法,方法中为具体业务
	protected abstract void doRun() throws Exception;
}

具体业务实现

TaskCenter 的实现类 TaskCenterSupport

public class TaskCenterSupport implements TaskCenter {
	private List tasks;
	
	public List getTasks() {
		return tasks;
	}

	public void loadTask(Task task) {
		if (tasks == null) {
			tasks = new ArrayList<>();
		}
		
		tasks.add(task);
	}
	
	public void run() {
		if(CollectionUtils.isNotEmpty(tasks)){
			for (Task task : tasks) {
				if(task != null) {
					task.setAlive(true);
					task.start();
				}
			}
		}
	}
	
	public void terminate() {
		if(CollectionUtils.isNotEmpty(tasks)){
			for (Task task : tasks) {
				if(task != null) {
					task.setAlive(false);
				}
			}
			
			tasks.clear();
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				logger.error(e.getMessage(),e);
				Thread.currentThread().interrupt();
			}
		}
	}
}

Task 的子类 ZBTask

public class ZBTask extends Task{ 
	
	public ZBTask () {
		TaskCenter taskCenter = TaskCenterSingleton.getInstance();
		taskCenter.loadTask(this);
	}
	
	public void doRun() throws Exception {
		/* 具体业务实现,这里就能会定时执行,
		 * 若有需要还可以在此使用休眠,
		 * 这样只会把此线程挂起,不影响其他 Task 子类的执行
		 */
	}

}

到此,相信大家对“怎么实现MainStarter”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网站标题:怎么实现MainStarter
本文来源:http://pwwzsj.com/article/gocidg.html