登陆 | 注册
你现在的位置:我的论坛 >> 计算机基础 >> 关于静态方法的疑问
关于静态方法的疑问

静态方法或变量是在静态代码区,程序加载时就存在了,直到程序退出. 代码共用 内存中只有一份拷贝

class Program
{
    public static void func()
    {
        Console.WriteLine("begin {0}",DateTime.Now);
        Thread.Sleep(10000);
        Console.WriteLine("end {0}", DateTime.Now);
    }

    static void Main(string[] args)
    {
        Thread t1 = new Thread(new ThreadStart(func));
        Thread t2 = new Thread(new ThreadStart(func));
        t1.Start();
        Thread.Sleep(2000);
        t2.Start();
    }
}

静态方法是可以并发调用的,是否可以安全的并发调用取决于内部静态属性的设计。

其实是微软为他们提供的类库所提供的一个保证,也就是说,微软承诺这些方法可以安全的多线程使用。并不表示线程安全和静态方法有任何关系。 如果我们要在自己的类库中暴露静态方法,也应该给用户与类似承诺。大多数时候,静态方法并不会造成线程安全的问题。问题往往出现在静态字段上。对于这些字段的读写,应该尽量暴露相应的方法或属性,内部进行Lock,以确保给予用户上面的承诺。

楼主 创建:08-04-29 13:37:55 更新:08-04-29 13:39:31
发表回复


Copyright (C) 2004-2008, All Rights Reserved