所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问.而现在, Lock提供了比synchronized机制更广泛的锁定操作, Lock和synchronized机制的主要区别:当获取了多个锁时, 它们必须以相反的顺序释放. synchronized机制对锁的释放是隐式的, 只要线程运行的代码超出了synchronized语句块范围, 锁就会被释放. 而Lock机制必须显式的调用Lock对象的unlock()方法才能释放锁, 这为获取锁和释放锁不出现在同一个块结构中, 以及以更自由的顺序释放锁提供了可能.
class NodeFactoryManager {
private var m_NodesFatory = Map[String, INodeFactory]()
private var m_defaultFactory = new DefaultNodeBuilder
private var m_lock = new ReentrantLock()//定义ReentrantLock
def registerNodeFactory(nodeTypeName: String, nodeFactory: INodeFactory): ErrCodes.ErrCode = {
m_lock.lock()
if (!m_NodesFatory.contains(nodeTypeName)) {
m_NodesFatory += (nodeTypeName -> nodeFactory)
m_lock.unlock()
ErrCodes.Success
} else {
m_lock.unlock()
ErrCodes.Factory_Already_registered
}
}
}