繁体   English   中英

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

[英]Static method in non static class and multithreading

我有一个具有静态方法的非静态类

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;
  }

}

此方法根据参数返回实例。 我很困惑“如果同时进行多个交易,这种方法会不会有任何问题”?

我是说同时进行多个交易会覆盖此方法? 还是每笔交易都会根据参数获得自己的对象?

PS:如果没有什么危害,为什么呢?

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

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

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

显然,您正在共享mLogger。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM