我一直在努力学习设计模式。 This site使用synchronized
关键字,但我不明白它的作用。
我在网上搜索,发现它与多线程和内存有些关联,但我是一名机械工程师,不明白这意味着什么。
有人可以帮我理解主题和synchronized
关键字吗?
答案 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()
{
…
}