2010-01-04 61 views
1

我已经在MSDN论坛上提出了一个问题,但得到了两个相反的答案。一般来说,我会介绍线程如何与静态类一起工作。如果我的代码同时从10个线程调用此(下)静态方法,它是否线程安全?我的意思是,代码如何在幕后流动?每个线程是否都在自己内部执行代码(就像我认为它与非静态类一样),或者它与静态方法不同,并且因为它的静态,所有线程都试图访问代码并发生冲突?谢谢!静态方法和线程

public static class A 
{ 

    static void Method(object parameter) 
    { 
     SqlCeConnection = ..... 
    } 
} 

链接到MSDN问题:Here

PS:我很抱歉,由于IE浏览器页面错误,我不能点击“添加评论”或“答案”,乔恩斯基特答案是很好的(如一般:)

+0

请发布msdn论坛链接或让我们知道是什么答案 – 2010-01-04 10:01:23

+1

看到了链接 - 我认为他们不是两个相反的答案。第一个人说'它会异步运行(同时)“。这是对的。但是,如果没有同步,你的结果将会错误。第二个人说,'他们会执行相同的代码'(他只是不同步说) – 2010-01-04 10:23:52

回答

6

它与非静态类完全相同。静态不影响任何事情 - 除了静态方法通常是预计是线程安全的。他们不是自动线程安全的,但你应该确保你以线程安全的方式实现它们。

如果代码不使用任何共享状态,应该没问题。是的,没有任何锁定,所有的线程可以同时执行相同的方法。

0

一个很好的例子可以是单例模式。在这一切你需要的是给定类的单个实例,并且可以通过使构造函数是私有的并给出静态方法或属性来访问该实例来确保。片段突出相同: -

class MyClass 
{ 
private MyClass() 
{ 

} 

public static MyClass Instance 
{ 
    get 
    { 
     lock(typeof(MyClass)) 
     { 
      if(__instance == null) 
       __instance = new MyClass(); 
     } 
     return __instance; 
    } 
} 

}

由于“实例”方法标记静态(线程一致的访问),但在您需要manully照顾它的多线程envoirnment(用锁) 。