是访问现场时,直接

是访问现场时,直接

问题描述:

通常线程安全有可能得到僵局,我们访问使用synchronized(锁)的领域。是访问现场时,直接

如果不使用同步(锁定)和直接访问领域,我们会遇到僵局在某些情况下?

不同步,不存在僵局,只有数据损坏和未定义的行为。

+0

我不同意。没有同步,死锁仍然是可能的。来源:http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html – 2011-05-02 12:09:13

+0

@Druv看到我的评论给你的答案 - 文章不支持这种说法。 – CPerkins 2011-05-02 12:49:34

+0

@Dhruv Gairola:不,只有(不正确)同步才会发生死锁。同步可能在第三方代码中,但我的答案仍然有效。你提到的文章都是关于同步死锁。 – 2011-05-02 14:16:26

当您使用错误的(或没有)同步您可以得到任何类型的bug。

你不能直接得到死锁只需通过访问现场没有​​块,但它可以很容易地导致死锁间接。

这意味着,访问字段本身不会阻止,但根据你做什么之后,它可能会导致未预期且随后导致死锁状态。

监视器关心互斥。

论deadlocks-问题并不重要,你用什么方法。更重要的是要满足某些conditions。无论您使用何种方法,除非满足这些条件,否则无法避免死锁。因此,即使使用同步,除非满足某些条件,否则无法避免死锁。

+0

我认为你的意思是你可以在不使用synchronized关键字的情况下拥有*(不避免)死锁。而且你不能保证“在某个地方”你*不会遇到死锁? – davmac 2011-05-02 11:58:25

+0

对不起,这就是我的意思。我会更新我的答案。 – 2011-05-02 12:00:15

+0

感谢您提供Brian Goetz文章的链接。这很好,是的,避免死锁可能会很棘手。然而,OP的问题是不使用'synchronized'关键字是否可能遇到死锁。 – CPerkins 2011-05-02 12:47:38