今天,在開啓定時任務線程時,任務在執行1遍之後不再執行。一直卡主,但無任務異常報出(不知是否是日誌屏蔽了這類錯誤)。
錯誤類似如下:
private Long a;
pirvate int timeout =50000;
private ChannelSftp sftp = new ChannelSftp ();
if (null !=sftp && System.currentTimeMillis() - a < timeout ) {
//XXXX業務代碼
}
其中 使用到了System.currentTimeMillis() 減去一個Long 型 < int 類型。
在加減運算之中,一般會自動的類型轉換,而且初始long 應該被賦予了初值0.
但是注意到了。。其實是 long - Long < int.
正常情況下不會有什麼問題,但是Long類型初始化並不像int 與 long 一樣被系統賦予初值0.導致Long類型爲空,線程僵死,後續定時線程上來後依然卡死在這樣,從外來看像是程序假死了。
在使用Integer 與Long 等基礎類型對應object,如果需默認值,需要初始化賦值,避免運算時假死。