Java中的“同步”是啥意思? [复制]

Posted

技术标签:

【中文标题】Java中的“同步”是啥意思? [复制]【英文标题】:What does "synchronized" mean in Java? [duplicate]Java中的“同步”是什么意思? [复制] 【发布时间】:2011-12-12 12:06:50 【问题描述】:

我一直在努力学习设计模式。 This site 使用 synchronized 关键字,但我不明白它的作用。

我在网上搜索了一下,发现和多线程和内存有点关系,但是我是机械工程师,不明白是什么意思。

谁能帮我理解线程和synchronized 关键字?

【问题讨论】:

synchronized 是 java 特定的关键字。 链接中的代码不是C++。 第一点是您链接到的代码示例是 Java 而不是 C++。 【参考方案1】:

正如评论者已经指出的那样,同步是一个 Java 关键字。

这意味着两个线程不能同时执行该方法,由 JVM 负责强制执行。

在 C++ 中,您将不得不使用一些同步结构,例如临界区或互斥体。可以咨询this。

【讨论】:

【参考方案2】:

在 (Java) 示例中

public static synchronized Singleton getInstance()

意味着一次只有一个线程应该能够访问 getInstance() 方法,以避免出现竞争情况。

【讨论】:

【参考方案3】:

C++ 中没有synchronized 关键字。

不过,Java 中有一个方法,it means the following two things:

不可能对同一对象的同步方法的两次调用交错。当一个线程正在为一个对象执行同步方法时,所有其他为同一对象调用同步方法的线程都会阻塞(暂停执行),直到第一个线程处理完该对象。 当一个同步方法退出时,它会自动建立一个happens-before 关系,随后调用同一对象的同步方法。这保证了对象状态的更改对所有线程都是可见的。

Similar rules apply to arbitrary blocks.

另外,我建议从同行评议的书籍中学习,而不是一些随意的非权威网站。

【讨论】:

以上是关于Java中的“同步”是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java泛型的类型参数中的问号是啥意思? [复制]

Python 中的 @ 和 lambda 是啥意思? [复制]

SetParent 的文档中的“同步 UIState”是啥意思?

Java 枚举类型中受保护的变量是啥意思? [复制]

正则表达式模式“[\\PL]+”在 Java 中是啥意思? [复制]

Java NIO: IOException: Broken pipe 是啥意思? [复制]