2011-02-24 38 views
1

只有静态方法(没有属性,字段或其他任何东西)有一个静态类,并有多个线程同时访问这些方法会有任何问题吗?静态方法和多线程

回答

0

是的,可以。这取决于你的方法如何编写。现在,如果只有静态方法,这在理论上意味着完全重入代码没有问题。

5

只要没有共享状态或外部资源,那么:没有任何风险。你提到“没有领域”等,这是很好的 - 只要它们不是间接的谈论共享状态(也许通过一些在这种情况下不是线程安全的常见论点,或者通过一些其他其他它调用的实用方法,它们以凌乱的方式共享状态),你应该没问题。

0

可能,是的。

试想:

class Logger 
{ 
    WriteToLogs(string msg) 
    { 
     // Write data to file1 
     ... 

     // Write data to file2 
     ... 
    } 
} 

现在想象你有多个线程试图()同时调用WriteToLog。在thread1完成写入日志文件之前,thread2被调度时会发生什么?在这种情况下,您最终可能会遇到各种各样的数据损坏。

静态类和方法不会固有地提供任何形式的线程同步,锁定等。这是供您设计和实现的。

0

是的,例如单例实现可以是静态的,但他们必须实现诸如double checked locking之类的机制来防止多线程问题。