关于jive中lock是怎么回事?

阿司匹林 04-07-17

关于jive中有好多的关于lock的使用不太清楚是怎么回事?
例如在以下的例子中:
1、public abstract class ForumFactory 中有一个
private static Object initLock = new Object();
public static ForumFactory getInstance(Authorization authorization) {
//If no valid authorization passed in, return null.
if (authorization == null) {
return null;
}
if (factory == null) {
synchronized(initLock) {
if (factory == null) {
String classNameProp = PropertyManager.getProperty("ForumFactory.className");
if (classNameProp != null) {
className = classNameProp;
}
try {
//Load the class and create an instance.
Class c = Class.forName(className);
factory = (ForumFactory)c.newInstance();
}
catch (Exception e) {
System.err.println("Failed to load ForumFactory class "
+ className + ". Jive cannot function normally.");
e.printStackTrace();
return null;
}
}
}
}
2、在public class PropertyManager 中
private static Object managerLock = new Object();
public static String getProperty(String name) {
if (manager == null) {
synchronized(managerLock) {
if (manager == null) {
manager = new PropertyManager(propsName);
}
}
}
return manager.getProp(name);
}
我不太清楚,那位仁兄可以帮解释一下可以吗?

banq
2004-07-18 10:00

因为Jsp+JavaBeans其实是多线程环境,通过加锁,保证某个时刻只有一个线程运行,特别是资源属性文件的获得等,这些内存中只要一份就可以。

还有有关事务锁,保证数据库记录唯一性,这些比较复杂,后来EJB将事务机制纳入容器来完成,无需开发者来编写相关程序。