默认情况下,非静态方法在通过多个线程访问时为每个线程都有自己的变量实例,因此如果它们不包含公共变量等,则使它们成为线程安全的。
另一方面,静态方法中的变量在线程之间共享,默认情况下它们是非线程安全的。
说,我有一个类,没有任何静态变量或方法。
public class Profile {
private ConcurrentDictionary<int, int> cache =
new ConcurrentDictionary<int, int>();
public AddToCache() {
}
public RemoveToCache() {
}
public DoSomethingThatShouldBeThreadSafe() {
}
}
但后来我从这个类创建了一个静态对象。
public static Profile objProfile = new Profile();
然后,使用多个线程访问 objProfile。
问题是,Profile 类 AddToCache、RemoveFromCache 和 DoSomethingThatShouldBeThreadSafe 的方法在通过 objProfile 使用时是否是线程安全的?它们的变量是否将在线程之间共享,即使它们不是静态的,因为类的整个实例是静态的?