乙個作業多個任務排程例子

2021-09-30 16:36:18 字數 3517 閱讀 6648

/**

* * @classname: metastreamsettask

* @description: todo(這裡用一句話描述這個類的作用)

* @author caozq

* @date 2023年10月24日

*/public class metastreamsettask extends singletaskjob

private void init()

@override

public string gettaskname()

@override

public taskresult execute() else

aelogger.info(marker, "結束排程task("+votemp.tostring()+")");

}maxweight --;

}//排程失敗需要處理其他事情

if(maxweight >0)

extractresult result = new extractresult(extractresultstatus.success,"success");

if (result.getstatus() == extractresultstatus.success)

return taskresult.failureresult("作業作業執行返回結果為null");

} catch (exception e)

}/**

* * @title: putweightforjob

* @description: todo(獲取job的執行優先順序)

* @param @param businessid

* @param @return 引數

* @return list返回型別

* @throws

*/private listputweightforjob(string businessid)

}if(null != temp && temp.size()>0)

return weightjob;

}/**

* * @title: getchildnode

* @description: todo(遞迴處理)

* @param @param weightjob

* @param @param postfix

* @param @param temp

* @param @return 引數

* @return list返回型別

* @throws

*/private listgetchildnode(listweightjob,dwetljobvo postfix, listtemp)

}} if(null != childlist)

} if (null == childlist)

return weightjob;

}

/***

* @title: getmaxweight

* @description: todo(獲取最高優先順序)

* @param @param vos

* @param @return 引數

* @return int 返回型別

* @throws

*/private int getmaxweight(listvos)

/***

* @title: exetaskthread

* @description: todo(併發處理相同權值的task)

* @param @param threadtask

* @param @param counter

* @param @return 引數

* @return string 返回型別

* @throws

*/private string exetaskthread(listthreadtask,countdownlatch counter)else

counter.countdown();

return flags;

});results.put("thread-" + index, future);

}string flag = null;

for (entry> entry : results.entryset())

}return flag;

}/**

e: exetask

* @description: todo(呼叫streamset介面方式)

* @param @param vo

* @param @return 引數

* @return string 返回型別

* @throws

*/@suppresswarnings("unchecked")

private string exetask(dwetljobvo vo)else

return msg;

}@suppresswarnings("unchecked")

private string getstreamsetstate(dwetljobvo vo,string url)else if(map.get("status").equals(dwconst.task_status_success))else

aelogger.info("迴圈查詢第"+exetotle+"次結果執行的狀態, status=" + map.get("status"));

exetotle ++ ;

} catch (interruptedexception e)

}return isfail?dwconst.task_status_fail:dwconst.task_status_success;

}/**

* * @title: getstate

* @description: todo(獲取task的狀態)

* @param @param vo

* @param @return 引數

* @return int 返回型別

* @throws

*/private string getstate(dwetljobvo vo),

if(null != list && list.size()>0)

return dwconst.task_status_ready;

}/**

* * @title: updatetaskstate

* @description: todo(修改執行狀態)

* @param @param vo

* @param @param status 引數

* @return void 返回型別

* @throws

*/private void updatetaskstate(dwetljobvo vo,string status)

}

singletaskjob   自己封裝的乙個job ,需要自己實現

搭建乙個多任務排程環境

目標實現乙個多工環境。1.系統可以多工執行 2.任務可以模組化程式設計 3.沒有排程演算法,排程點由使用者決定。作業系統描述的是多工處理。多工的意思是在巨集觀上多個任務是同時在執行的,但是微觀上,任何乙個時刻只有乙個任務在執行。作業系統有乙個任務控制塊的結構體,裡面有乙個最重要的成員 棧指標,記錄任...

乙個簡單例子和多個bean檔案

package com.liyixing.spring.service import com.liyixing.spring.model.account public inte ce iaccount 定義實現 package com.liyixing.spring.service.imp impo...

乙個簡單的定時任務小例子

強制 執行緒資源必須通過執行緒池提供,不允許在應用中自行顯式建立執行緒。說明 使用執行緒池的好處是減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷,解決資 源不足的問題。如果不使用執行緒池,有可能造成系統建立大量同類執行緒而導致消耗完記憶體或者 過度切換 的問題。強制 執行緒池不允許使用 exe...