多线程环境中的静态方法

时间:2013-08-29 18:27:14

标签: c# .net multithreading static instance

我有一个带有辅助静态方法aA的A类。这个方法的局部变量是静态的,我也在其中实例化一个对象B.想象一下,我创建了一些A类对象,必要时调用这个静态方法。

在现实世界中,我下载异步XML文档并解析它们。解析方法是静态的,我想知道里面发生了什么?这样的辅助方法线程是否安全?静态方法变量发生了什么?

您是否会如此善良并解释实例化类的静态方法在多线程环境中的行为?

3 个答案:

答案 0 :(得分:2)

答案与此类性质的任何其他线程问题相同:如果方法将访问可变共享状态,则同步对该状态的访问。这同样适用于静态方法,也适用于实例方法。

如果静态方法仅使用其参数和 local 变量(在方法体内声明的变量),那么它可能是线程安全的。如果它写入静态类级变量或数据结构,或者如果它们可以被另一个线程变异,则从所述结构读取,那么您必须同步对该数据的访问。

如果没有看到相关方法的定义,我无法明确说明该方法是否是线程安全的。

答案 1 :(得分:1)

静态与否的方法与线程安全性无关。实例方法只是一个静态方法,它接受一个名为this的隐藏参数。没有其他区别。

线程安全是整个系统的属性,而不是单一方法。确保不要同时写入正在其他线程中读取或写入的变量。确保系统作为一个整体在任意线程调度面前符合规范。

如果没有看到代码,很难说更多。

答案 2 :(得分:0)

静态方法不一定是线程安全的,但它们可以是。检查特定方法的文档,看它是否是线程安全的。