我有一个带有辅助静态方法 aA 的 A 类。该方法的局部变量是静态的,我也在其中实例化了一个对象 B。想象一下,我创建了几个 A 类对象,必要时调用这个静态方法。
在现实世界中,我会异步下载 XML 文档并解析它们。Parse 方法是静态的,我想知道里面发生了什么?这种辅助方法线程安全吗?静态方法变量是怎么回事?
你会这么好心并解释实例化类的静态方法在多线程环境中的行为吗?
我有一个带有辅助静态方法 aA 的 A 类。该方法的局部变量是静态的,我也在其中实例化了一个对象 B。想象一下,我创建了几个 A 类对象,必要时调用这个静态方法。
在现实世界中,我会异步下载 XML 文档并解析它们。Parse 方法是静态的,我想知道里面发生了什么?这种辅助方法线程安全吗?静态方法变量是怎么回事?
你会这么好心并解释实例化类的静态方法在多线程环境中的行为吗?
答案与任何其他这种性质的线程问题相同:如果该方法要访问可变共享状态,请同步对该状态的访问。这同样适用于静态方法和实例方法。
如果静态方法只使用它的参数和局部变量(在方法体中声明的变量),那么它可能是线程安全的。如果它写入静态类级变量或数据结构,或者从所述结构中读取(如果它们可以被另一个线程改变),那么您必须同步对该数据的访问。
如果没有看到相关方法的定义,我无法明确说明该方法是否是线程安全的。
方法是否为静态与它是否是线程安全的没有关系。实例方法只是一个静态方法,它接受一个名为 的隐藏参数this
。没有其他区别。
线程安全是整个系统的属性,而不是单个方法的属性。确保不要写入同时在其他线程中读取或写入的变量。确保系统作为一个整体在面对任意线程调度时表现符合规范。
没有看到代码很难说更多。
静态方法不一定是线程安全的,但它们可以。检查特定方法的文档以查看它是否是线程安全的。