- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个多线程应用程序和一个单例类:
public final class Singleton {
private static MyClass mc;
public static final Object getInstance() {
if(mc == null) {
mc = new MyClass();
}
return mc;
}
}
当然,这在一般的多线程场景下是行不通的。但请考虑以下情况:
getInstance()
,使mc初始化。我的假设:
这应该可行,因为 mc
字段的初始化和对象的构造发生在启动其他线程的所有后续 Thread.start()
调用之前.并且线程的 Thread.start()
发生在该线程的所有其他操作之前。因此 mc
的初始化发生在所有其他线程中的所有操作之前,以便 getInstance()
将为所有线程返回正确的值。
这个假设对吗?为什么/为什么不?
最佳答案
您的分析确实非常好。
准确地说:在一个线程上顺序发生的所有事情都具有发生在关系之前的关系(显然,是这样说的:“如果 x 和 y 是同一线程的操作,并且 x 在程序顺序中出现在 y 之前,那么 hb (x,y)。”)
JLS 的 17.4.5 然后继续说以下内容:
“线程上对 start() 的调用发生在已启动线程中的任何操作之前。”
所以综合来看,在单例实例化和启动的线程之间有一个明确的发生在顺序之前,因此可以保证它们看到最新的值。
简单地说:创建的线程保证可以看到其父线程在创建之前所做的一切,否则并发编程几乎是不可能的。
关于java - Java 中没有同步的线程安全单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26790059/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!