单线程在多线程环境中

时间:2011-04-12 09:54:47

标签: multithreading language-agnostic synchronization singleton

当使用单例时,如果类有实例字段,当几个线程可能使用单例时你应该小心吗? (这些字段是可变的,它们的值可以改变)

我没有尝试,但理论上似乎答案是肯定的,你需要同步(或跳过单身人士)

4 个答案:

答案 0 :(得分:2)

当您从多个线程(或进程)访问对象(或相同的可变数据)时,您将需要某种同步。它是单例还是任何其他“非单例”对象没有区别。

另外一个问题,在单例的情况下是单例的创建,但如果在第一次使用它时创建它,则第一次可能同时用于不同的线程,因此您需要同步单例创建同样。

答案 1 :(得分:1)

当使用单例时,实例由应用程序中的所有线程共享,所以是的,应该格外小心以确保不会出现并发问题。

然而,这个问题不是单身人士所特有的,每当在多个线程之间共享对象实例时都应该考虑这个问题。

答案 2 :(得分:1)

是的,您需要同步访问单身人士的所有字段,否则您将对您的对象状态造成严重破坏。

另一方面,如果你可以在多线程环境中避免使用单例,那么你会更好。你为什么不绕过你的对象,而不是使用相同的实例。

如果共享,您仍然需要同步访问权限,即使您传递它也是如此。

我不是真正的单身人士,因为他们倾向于为更多的单身人士带来 need ,这是你不可避免的应该避免的。

答案 3 :(得分:0)

与许多多线程问题一样,答案取决于它。 ;)只读字段不需要额外的同步,而任何读写字段肯定都需要它。