构建可扩展的Java EE应用(一) - 编程入门网
了"this"对象。
Code list 3: public class SchemaManager { private HashMap schema; private HashMap treeNodes; ... public boolean synchronized updateSchema(HashMap nodeTree) { String nodeName = (String)nodeTree.get("nodeName"); String nodeAttributes = (List)nodeTree.get("attributes"); if (nodeName == null) return false; else return schema.update(nodeName,nodeAttributes); } public boolean synchronized updateTreeNodes() { ...... } }
对比Code list 2中的代码,这段代码就显得更糟糕些了,因为当调 用"updateSchema"方法时,它锁定了整个 对象,为了获得更好的粒度控制,应该仅仅锁定"schema"变量来替代锁定整个对 象,这样其他不同的方法就可 以保持并行执行了。 避免在static方法上加锁 最糟糕的状况是在static方法上加"synchronized",这样会造成锁定这个class的 所有实例对象。
构建可扩展的Java EE应用(一)(4)时间:2011-07-08 blogjava BlueDavy当使用Java 2D来为报表生成字体对象时,开发人员放了一个native的static 锁在"initialize"方法上,不过这是sun JDK 1.4中才会出现的,在JDK 5.0中, 这个static lock就消失了。 在Java SE 5.0中使用lock free的数据结构 在Java中,"synchronized"关键字是一个较简单、并且相对来说比较好用的协 作机制,不过同时对于管理一个简单的操作(例如增加统计值或更新一个值)来 说就显得比较重量级了,就像以下的代码: Code list 4: public class OnlineNumber { private int totalNumber; public synchronized int getTotalNumber() { return totalNumber; } public synchronized int increment() { return ++totalNumber; } public synchronized int decrement() { return --totalNumber; }} 以上的代码只是用来锁定非常简单的操作,"synchronized"块也是非常的短。 但是锁是 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |