[hyddd的FindBugs分析记录][M M NP] Synchronize and null check on the same field
2009-02-16 14:39 hyddd 阅读(925) 评论(0) 编辑 收藏 举报[M M NP] Synchronize and null check on the same field. [NP_SYNC_AND_NULL_CHECK_FIELD]
Since the field is synchronized on, it seems not likely to be null. If it is null and then synchronized on a NullPointerException will be thrown and the check would be pointless. Better to synchronize on another field.
先看一段代码:
Timestamp time = null;
synchronized (GoodsSysConfig.tableLastUpdateTime) {
if (GoodsSysConfig.tableLastUpdateTime != null) { //这句判断是多余的,可以去掉!
time = GoodsSysConfig.tableLastUpdateTime.get(tableName);
}
else {
log.error("GoodsSysConfig.tableLastUpdateTime 为空!");
}
}
return time;
}
这段代码会引发两个BUG警告,一个是:[H C RCN] Nullcheck of value previously dereferenced,另外一个就是这里要介绍的[M M NP] Synchronize and null check on the same field。其实,在[H C RCN] Nullcheck of value previously dereferenced的介绍里面已经提到Synchronize and null check on the same field这个问题了,出现这个BUG的原因是:synchronized (GoodsSysConfig.tableLastUpdateTime) 这里已经对GoodsSysConfig.tableLastUpdateTime这个变量进行了是否为Null的判断,如果为Null,synchronized (...)会抛异常,并且经过synchronized (...)后,GoodsSysConfig.tableLastUpdateTime已经被独占,所以 if (GoodsSysConfig.tableLastUpdateTime != null) 这句可以看作是多余的,因为GoodsSysConfig.tableLastUpdateTime不可能为Null。
作者:hyddd
出处:http://www.cnblogs.com/hyddd/
本文版权归作者所有,欢迎转载,演绎或用于商业目的,但是必须说明本文出处(包含链接)。