使用findbugs经常碰到的问题Incorrect lazy initialization and update of static field

问题描述

详细描述Thismethodcontainsanunsynchronizedlazyinitializationofastaticfield.Afterthefieldisset,theobjectstoredintothatlocationisfurtherupdatedoraccessed.Thesettingofthefieldisvisibletootherthreadsassoonasitisset.Ifthefutheraccessesinthemethodthatsetthefieldservetoinitializetheobject,thenyouhaveaveryseriousmultithreadingbug,unlesssomethingelsepreventsanyotherthreadfromaccessingthestoredobjectuntilitisfullyinitialized.Evenifyoufeelconfidentthatthemethodisnevercalledbymultiplethreads,itmightbebettertonotsetthestaticfielduntilthevalueyouaresettingittoisfullypopulated/initialized.有谁能解释下吗?一直对这个问题很模棱两可,不胜感谢

解决方案

解决方案二:
该回复于2009-08-14 13:30:02被版主删除

时间: 2024-10-01 01:12:03

使用findbugs经常碰到的问题Incorrect lazy initialization and update of static field的相关文章

容器的延迟初始(Lazy Initialization)

有时候您只是想要获得物件中某个属性的资料,如果您的物件中包括Set等容器物件,若从资料库中载入资料时全部载入所有的物件,却只是为了取得某个属性,显然的这样很没有效率. 以Set中的范例来说,如果您只是想取得物件之後,显示物件的某些属性,例如name属性: Session session = sessionFactory.openSession(); User user = (User) session.load(User.class, new Integer(1)); System.out.pr

FindBugs规则整理

FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查.没有合理关闭资源.字符串相同判断错(==,而不是equals)等 一.Security 关于代码安全性防护 1.Dm: Hardcoded constant database password (DMI_CONSTANT_DB_PASSWORD) 代码中创建DB的密码时采用了写死的密码. 2.Dm

Findbugs异常总汇

FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查.没有合理关闭资源.字符串相同判断错(==,而不是equals)等 一.Security 关于代码安全性防护 1.Dm: Hardcoded constant database password (DMI_CONSTANT_DB_PASSWORD) 代码中创建DB的密码时采用了写死的密码. 2.Dm

findBug 错误修改指南

FindBugs错误修改指南  1. EC_UNRELATED_TYPES Bug: Call to equals() comparing different types Pattern id: EC_UNRELATED_TYPES, type: EC, category: CORRECTNESS 解释: 两个不同类型的对象调用equals方法,如果equals方法没有被重写,那么调用object的==,永远不会相等:如果equals方法被重写,而且含有instanceof逻辑,那么还是不会相等

解释一个关于Hibernate lazy的问题

问题 使用Hibernate时意外报错: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53) at o

一个关于Hibernate lazy的问题

使用Hibernate时意外报错: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53) at org.

TIJ阅读笔记(第六章)

笔记 6:复用类 合成所使用的语法  如果想对reference进行初始化,那么可以在以下几个时间进行:    1.在定义对象的时候.这就意味着在构造函数调用之前,它们已经初始化完毕了.    2.在这个类的构造函数里.    3.在即将使用那个对象之前.这种做法通常被成为"偷懒初始化(lazy initialization)".如果碰到创建对象的代价很高,或者不是每次都需要创建对象的时候,这种做法就能降低程序的开销了.    继承所使用的语法.    继承设计方面有一条通用准则,那就

Apache Commons Net v3.0.1发布

Apache Commons Net项目中封装了各种网络协议的客户端,支持的协议包括: FTP NNTP SMTP POP3 Telnet TFTP Finger Whois rexec/rcmd/rlogin Time (rdate) and Daytime Echo Discard NTP/SNTP 最大的改进: 增加对 IMAP 和 IMAPS 的支持 增加对 SMTPS 和 POP3S 的支持 Apache Commons Net 3.0.1发行说明: Fixed Bugs:o NET-

跟屌丝大哥学习设计模式--工厂方法模式

东汉<风俗通>记录了一则神话故事:"开天辟辟,未有人民,女娲搏,黄土作人--",讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹而洁净的自然环境,寂静而又寂寞,于是女娲决定创造一个新物种(即人类)来增加世界的繁荣,怎么制造呢?       别忘了女娲是神仙,没有办不到的事情,造人的过程是这样的:首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生:       第一