"同步"在Java中意味着什么?

Coo*_*der 23 java synchronized

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

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

任何人都可以帮我理解线程和synchronized关键字吗?

Lig*_*ica 21

synchronizedC++中没有关键字.

但是,在Java中有一个,对于方法,它意味着以下两件事:

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

类似的规则适用于任意块.

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


And*_*rsK 20

在(Java)示例中

public static synchronized Singleton getInstance()
Run Code Online (Sandbox Code Playgroud)

意味着一次只有一个线程应该能够访问getInstance()方法,以避免竞争条件.


PRo*_*eau 6

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

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

在C++中,您将不得不使用一些同步构造,如临界区或互斥体.你可以咨询一下.


csa*_*as1 5

如果一个线程尝试读取数据,而另一个线程尝试更新相同的数据,则会导致状态不一致。

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

 public synchronized void update()
 {
 …
 }
Run Code Online (Sandbox Code Playgroud)