“同步”在Java中意味着什么?

时间:2011-10-21 10:59:41

标签: java synchronized

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

我在网上搜索,发现它与多线程和内存有些关联,但我是一名机械工程师,不明白这意味着什么。

有人可以帮我理解主题和synchronized关键字吗?

4 个答案:

答案 0 :(得分:19)

C ++中没有synchronized个关键字。

但是Java中有一个方法it means the following two things

  
      
  • 同一个对象上的两个同步方法的调用不可能进行交错。当一个线程正在为一个对象执行一个synchronized方法时,所有其他线程都会调用同一个对象的同步方法(暂停执行),直到第一个线程完成该对象为止。
  •   
  • 当同步方法退出时,它会自动与同一对象的同步方法的任何后续调用建立before-before关系。这可以保证对所有线程都可以看到对象状态的更改。
  •   

Similar rules apply to arbitrary blocks

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

答案 1 :(得分:18)

在(Java)示例中

public static synchronized Singleton getInstance()

表示一次只能有一个线程能够访问getInstance()方法,以避免竞争条件。

答案 2 :(得分:6)

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

这意味着两个线程无法同时执行该方法,JVM负责执行该方法。

在C ++中,您必须使用一些同步构造,如临界区或互斥锁。您可以咨询this

答案 3 :(得分:5)

如果一个线程试图读取数据和其他线程 线程试图更新相同的数据,它导致 不一致的状态。

可以通过同步访问来防止这种情况 对数据。 使用“同步”方法:

 public synchronized void update()
 {
 …
 }