在Java中,在同一对象上锁定和同步是否安全?

时间:2015-09-23 19:33:28

标签: java multithreading synchronization

我正在使用Java构建并发应用程序。为避免在外部暴露我的锁定对象,我有一个private final锁定对象:

 private final Object Lock = new Object();

我使用锁来进行线程之间的同步:

synchronized (Lock) {

    // Do stuff
}

使用锁来等待条件:

while (conditionIsNotMet) {

    Lock.wait();
}

对两种并发模式使用相同的对象会导致任何问题吗?这样做有什么我应该注意的吗?

1 个答案:

答案 0 :(得分:1)

将Lock用于多个目的通常是不好的做法。通常,您应该将Lock与您的条件相关联,而另一个用于同步对共享数据的访问。也就是说,没有什么能阻止你这样做。

更新:那就是说,你应该注意@sstan评论 - 你需要在等待之前锁定Lock。如果您还在其他地方使用了锁定 ,那么您就会要求陷入僵局。