2014-09-21 22 views
0

当我们说在Java中的一段代码同步到一个对象锁是什么意思。在同步块中的对象上获取锁

我的意思是,如果有我尝试同步在完全不相干的类的对象,它具有无关的同步block.will线程使用的仍分别执行此代码成员和变量是什么? 我无法在我的系统上执行多线程场景,因为它不能保证理想的输出,所以请在sychronized(object)同步块时告诉我应该使用什么对象?

+0

'object'作为**范围**同步的一种方式。任何与'object'实例同步的东西都会共享这个监视器。 – 2014-09-21 13:18:25

+0

对啊。但如果我使用同步(xyx)其中xyz是与当前类无关的任何随机类对象,那么将不会有线程安全执行同步代码? – 2014-09-21 13:49:53

回答

3

你都应该保护共享数据与锁。这意味着将其封装在访问数据的类中,同时保持专用对象的锁。

你不应该把它留给第三方的良好意愿使用你的锁。

+0

多数民众赞成在罚款。但我将如何决定我应该锁定哪个对象?它总是“这个”或其他一些对象。 – 2014-09-21 13:51:40

+0

@jayendrabhatt不,它并不总是这样。您需要知道您正在保护哪些数据,并确保对该数据的任何访问都受到同一锁的保护。使用哪个对象与知道哪个对象是锁并保持一致无关。 – 2014-09-21 15:50:24

+0

如果我用随机obj锁定一段代码,那么所有的东西都可以被保护(我的意思是什么范围的东西)。我知道我找不到适当的词来提出这个问题:)。但请尽量回答 – 2014-09-21 16:15:25