【发布时间】:2014-08-26 22:28:03
【问题描述】:
我刚刚研究了synchronized 方法和块的主题。我不完全理解同步块。例如:
synchronized(dataStructure){
someDataStructure.modifyInSomeWay();
}
我认为这段代码的作用是:它告诉线程在运行someDataStructure.modifyInSomeWay() 之前,它们需要获得dataStructure 的内在锁。这是正确的吗?
如果是,那么下一个假设如何:线程在尝试访问成员同步方法或引用对象的同步块时仅需要对象的内在锁。在任何其他情况下,线程不需要对象的锁就可以以任何方式干扰它。
如果我的两个假设都是正确的,那就意味着上面的代码实际上说了以下内容:
"一个线程只有在获得了
dataStructure的内在锁。的内在锁dataStructure当前由另一个线程拥有,仅当其中一个 以下是正确的:A- 一个线程当前正在运行
synchornized方法dataStructure.B- 线程当前正在运行
synchronized块引用dataStructure.在任何其他情况下,例如当一个线程只是在搞乱
dataStructure的状态,内部锁是空闲的。”
这准确吗?
【问题讨论】:
标签: java multithreading synchronization