jstrorm task
task是storm中任務的實質,也就是業務邏輯的載體,首先task實現了runnable介面,那我們大致可以猜到task實際是在乙個執行緒中不斷了執行某些程式,看一下重寫的run方法
public void run() catch (throwable e) else
}}
run方法實質是對execute方法的乙個封裝,繼續看execute方法
public taskshutdowndameon execute() throws exception
該方法返回的是乙個taskshutdowndameon例項,我們先看一下getshutdown方法
public taskshutdowndameon getshutdown(listallthreads, runnablecallback baseexecutor)
}// 將解碼的執行執行緒新增到執行緒list裡
listrecvthreads = taskreceiver.getdeserializethread();
for (asyncloopthread recvthread : recvthreads)
// 將編碼的執行執行緒新增到執行緒list裡
listserializethreads = tasktransfer.getserializethreads();
allthreads.addall(serializethreads);
taskheartbeattrigger taskheartbeattrigger = ((baseexecutors) baseexecutor).gettaskhbtrigger();
// 建立taskshutdowndameon執行緒
return new taskshutdowndameon(
taskstatus, topologyid, taskid, allthreads, zkcluster, taskobj, this, taskheartbeattrigger);
}
可以看到該方法主要是將一些藏在其它例項裡的執行緒給加入執行緒list裡,然後構造了乙個taskshutdowndameon例項,該例項應該包含用於清理所有資源的方法,看一下taskshutdowndameon,該類實現了shutdownabledameon,而其重寫的三個方法最主要的就是shutdown方法,該方法中做了資源的清理
@override
public void shutdown() catch (interruptedexception ignored)
// all thread will check the taskstatus
// once it has been set to shutdown, it will quit
// 更新任務狀態
taskstatus.setstatus(taskstatus.shutdown);
// 將所有執行緒都進行清理
for (asyncloopthread thr : allthreads) catch (throwable e)
log.info("successfully shutdown " + thr.getthread().getname());
}taskheartbeattrigger.unregister();
log.info("successfully shutdown task heartbeat trigger for task:{}", taskid);
try catch (exception e)
log.info("successfully shutdown task " + topologyid + ":" + taskid);
}}
至此jstorm的task大致也解析完了,接下來看一下task中除了處理業務的外最為重要的其它兩個例項——tasktransfer與taskreceiver,看這兩個類tasktransfer和taskreceiver,這兩個類大致是差不多的,重要的都是類內部的兩個實現了runnablecallback的私有類。 《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...
FreeRTOS原始碼閱讀 一
之前閱讀了rt thread 的原始碼,rtt原始碼是unix風格,看起來比較熟悉.最近有些空閒時間,打算閱讀freertos的原始碼,看看兩者的差別。freertos作業系統是完全免費的作業系統,具有原始碼公開 可移植 可裁減 排程策略靈活的特點,可以方便地移植到各種微控制器上執行 來自度娘 如今...