我正在研究吊索框架如何工作。但是我对多线程编程的了解非常有限,无法理解他们在做什么,这是我的问题:
这是我正在研究AdapterManagerImpl.java的类,在函数registerAdapterFactory(第247行)上,他们在第281行定义了一个同步代码块,它是:
synchronized ( adfMap ) {
adfMap.put(reference, factoryDesc);
}
任何人都可以解释为什么adfMap
是共享资源并标记为已同步?它如何影响表现?
答案 0 :(得分:0)
adfMap
用作锁定。
synchronized ( adfMap ) { ... }
表示没有两个线程可以同时调用此锁保护的任何代码。如此简单 - 很容易弄错: - )。
非正式解释: 当此锁用作另一个类中的锁时,这也会影响这些其他类的相应实例。
当此锁是AdapterManagerImpl中的私有静态成员时,这意味着没有两个线程可以同时在任何AdapterManagerImpl实例上输入由此锁保护的任何代码。
更正式的解释: 锁定保护防止由它保护的所有代码段同时由两个不同的线程输入(同一个线程可以多次输入代码 - >同步是可重入的)。锁是一个对象,它保护由此锁对象(对象标识)保护的所有代码段。如果代码中某处有另一个具有相同名称的锁变量,则它完全独立于第一个锁。