理解AdapterManager上的synchronized关键字是一类吊索框架

时间:2015-10-29 09:02:28

标签: java multithreading synchronization sling

我正在研究吊索框架如何工作。但是我对多线程编程的了解非常有限,无法理解他们在做什么,这是我的问题:

这是我正在研究AdapterManagerImpl.java的类,在函数registerAdapterFactory(第247行)上,他们在第281行定义了一个同步代码块,它是:

        synchronized ( adfMap ) {
            adfMap.put(reference, factoryDesc);
        }

任何人都可以解释为什么adfMap是共享资源并标记为已同步?它如何影响表现?

1 个答案:

答案 0 :(得分:0)

adfMap

用作锁定。

synchronized ( adfMap ) { ... }

表示没有两个线程可以同时调用此锁保护的任何代码。如此简单 - 很容易弄错: - )。

非正式解释: 当此锁用作另一个类中的锁时,这也会影响这些其他类的相应实例。

当此锁是AdapterManagerImpl中的私有静态成员时,这意味着没有两个线程可以同时在任何AdapterManagerImpl实例上输入由此锁保护的任何代码。

更正式的解释: 锁定保护防止由它保护的所有代码段同时由两个不同的线程输入(同一个线程可以多次输入代码 - >同步是可重入的)。锁是一个对象,它保护由此锁对象(对象标识)保护的所有代码段。如果代码中某处有另一个具有相同名称的锁变量,则它完全独立于第一个锁。