package cn.superdesk.uniorder.common.queue.block;

/**
 * @Description: 任务接口定义 可排序
 * @Author: linjinyu
 * @CreateDate: 2021/9/9 下午3:46
 * @UpdateUser: linjinyu
 * @UpdateDate: 2021/9/9 下午3:46
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public interface TaskInterface extends Comparable<TaskInterface> {


	// 将该任务插入队列
	void enqueue();

	// 执行具体任务的方法
	void doTask();

	// 任务执行完成后的回调方法
	void finishTask();

	// 设置任务优先级
	TaskInterface setPriority(TaskPriorityEnum mTaskPriority);

	TaskInterface setTaskParamsJson(String taskParamsJson);

	// 获取任务优先级
	TaskPriorityEnum getPriority();

	// 当优先级相同 按照插入顺序 先入先出 该方法用来标记插入顺序
	void setSequence(int mSequence);

	// 获取入队次序
	int getSequence();

	// 每个任务的状态,就是标记完成和未完成
	boolean getStatus();

	// 设置每个任务的执行时间,该方法用于任务执行时间确定的情况
	TaskInterface setDuration(int duration);

	// 获取每个任务执行的时间
	int getDuration();

	// 阻塞任务执行,该方法用于任务执行时间不确定的情况
	void blockTask() throws Exception;

	// 解除阻塞任务,该方法用于任务执行时间不确定的情况
	void unLockBlock();
}
