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

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

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

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

【问题讨论】:

  • synchronized 是 java 特定的关键字。
  • 链接中的代码不是C++。
  • 第一点是您链接到的代码示例是 Java 而不是 C++。

标签: java synchronized


【解决方案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.

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

      【讨论】:

        猜你喜欢
        • 2012-08-13
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2013-10-04
        • 2015-06-08
        • 1970-01-01
        • 2018-12-06
        相关资源
        最近更新 更多