2011-12-15 98 views
2

当一个网站同时击中具有非静态变量的相同静态方法时,即使未声明为静态,这些变量是否是静态的?我会这样认为的,但我不得不问。静态新手:静态类/方法中的非静态变量是否意味着静态?

另一种选择是相同的代码,不同的执行有不同的内部变量,所以这段代码不会产生例如有意想不到的字符串长度:

public static class MyClass 
{ 
    public static int getResult(string ext) 
    { 
     int length = est.length; // One place in RAM or multiple? 
     Thread.Sleep(5000);  // Does this stop program execution for others? 
     return length; 
    } 
} 

问题总结:

  1. 是没有声明的静态方法变量静态隐含静态,即同时执行静态代码会相互影响吗?
  2. 或者做这些变量都有各自的存储空间吗?
  3. 和Thread.Sleep(5000)在一个静态方法中停止所有用户的执行?

回答

5

您在展示本地变量。所以不,这些不是静态变量。每次调用方法(包括如果它递归地调用自己),你会得到一组新的变量。不同的线程将而不是共享这些变量。请注意,这与该类是静态类无关。你需要区分:

  • 局部变量,这属于该声明它们
  • 实例变量的方法,与声明类型
  • 静态变量,与声明类型本身相关联的特定实例相关联(而不是与任何特定实例)

Thread.Sleep不仅使当前线程睡眠 - 如果你的应用程序有多个线程,别人仍然会能够执行。

+0

TYVM。我使用LinqPad创建了一个例子来证明它。我有三个线程计数,倒计时,不计算,只报告变量内容。像你所描述的那样工作。 – 2011-12-15 23:28:11