为什么Java中的synchronized关键字称为“同步”而不是更精确的“互斥”?

时间:2010-04-27 03:41:53

标签: java synchronized

我听说选择使用'synchronized'这个词来描述互斥语句只是一个错误(编辑:'错误'在这里是一个糟糕的选择。请参阅编辑)在Java中,但我想知道如果实际上有选择背后的原因。

[编辑]

在Safyan的评论的推动下,我想补充一点,同步是建立线程之间时序关系的通用术语。它可以包括互斥和速率控制之类的事情(例如,两个线程以相同的速率执行某些操作)。使用“synchronized”来表示互斥而不是像'mutexed'这样的更具体的关键词似乎不必要地含糊不清。

3 个答案:

答案 0 :(得分:7)

这不是一个错误。它意味着它所说的;代码必须与其他线程同步以提供互斥。事实上,术语“同步”可能比“互斥”更有意义,因为“互斥”意味着非常特殊类型的同步原语,并且synchronized关键字可以使用任意数量的线程同步原语实现(测试和设置为活动投票,信号量等。)。

答案 1 :(得分:0)

synchronized关键字用于获取和释放Monitor上的锁。与Mutexes一样,Monitors用于并发控制,但它们并不相同。

使用synchronized本身并不是一个错误,但它可以是一个用于多线程的低级构造,不恰当的使用会很快导致多线程错误。

答案 2 :(得分:0)

使用synchronized关键字而不是互斥体实际上是表达该术语的好方法。通过互斥体我们不是很清楚,但是synchronized关键字本身就说明了自己。 Synchronized被放置在代码中,该代码实际上需要在所有想要访问该代码的线程之间同步。这就是为什么它被称为同步。