非静态类和多线程中的静态方法

时间:2014-03-18 08:15:16

标签: c# multithreading static-methods

我有一个非静态类,它有一个静态方法

public class ITelcoServicesFactory
{
  public static ITelco GetITransactionHandler(int pTelcoId, int pTransactionMode)
  {
        ITelco lITelcoServices = null;
        if (pTelcoId < 0)
        {               
            lITelcoServices = new DUMMY_Impl(pTransactionMode);
            mLogger.Debug("ITransactionHandler Dummy Implementation");
        }
        return lITelcoServices;
  }

}

此方法基于参数返回实例。我很困惑&#34;如果同时发生多笔交易,这种方法会出现任何问题&#34; ?

我的意思是同时多个事务会覆盖此方法?或者每个交易都会根据参数获得自己的对象?

PS:如果没有任何伤害,为什么?

3 个答案:

答案 0 :(得分:2)

我看到的唯一危险是这些线:

lITelcoServices = new DUMMY_Impl(pTransactionMode);
mLogger.Debug("ITransactionHandler Dummy Implementation");

应检查DUMMY_Impl构造函数的代码。

显然你正在分享mLogger。

在其Debug方法中仔细查看(和/或在此处发布),以确保您没有遇到并发问题。

答案 1 :(得分:2)

我不知道所有以前的人如何确定您没有使用任何共享资源。您显然是共享记录器,并且不知道您的DUMMY_Impl构造函数是做什么的。

大多数记录器都是线程安全的,因此归结为虚拟实现构造函数。如果它是线程安全的,那么你的函数是线程安全的。

答案 2 :(得分:1)

由于您没有使用任何静态变量,因此不会遇到多线程问题。创建的所有局部变量只能用于该线程,因此您很好。

当您使用任何静态变量时,情况并非如此,因为它们共享具有多个线程的唯一实例