在Java中,“synchronized”是什么意思?

26

我一直在努力学习设计模式。 这个网站 使用了 synchronized 关键字,但是我不明白它的作用。

我在网上搜索发现,它与多线程和内存有关,但我是机械工程师,不理解这是什么意思。

请问,有没有人可以帮助我理解线程和 synchronized 关键字呢?


4
synchronized 是 Java 特定的关键字。 - Prince John Wesley
1
链接中的代码不是C++。 - Skizz
1
第一点是,您链接的代码示例是Java而不是C ++。 - Douglas Leeder
3个回答

23

C++中没有synchronized关键字。

然而在Java中有一个,对于方法它有以下两个含义

  • 同一个对象上的两个同步方法调用不能交错。当一个线程为一个对象执行同步方法时,所有其他调用该对象的同步方法的线程将被阻塞(挂起执行),直到第一个线程完成该对象。
  • 当同步方法退出时,它会自动与后续调用同一个对象的同步方法建立happens-before关系。这保证了对对象状态的更改将对所有线程可见。

任意代码块都适用类似的规则

另外,我建议从经过同行评审的书籍中学习,而不是从任意的非权威网站上学习。


21

在这个(Java)示例中

public static synchronized Singleton getInstance()

这意味着一次只能有一个线程访问getInstance()方法,以避免竞态条件。


7

正如评论者已经指出的那样,synchronized 是 Java 关键字。

它意味着两个线程不能同时执行该方法,而 JVM 负责实施。

在 C++ 中,您将需要使用一些同步构造,如关键部分或互斥量。您可以查阅这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接