我的代码被AJAX UI(多线程)调用,并在Json中发送输出数据处理。最近在重构代码的时候,我们将很多常用的和重复的方法都转移到了一个单独的文件中,因为我们没有处理任何静态/共享数据。 以下是一个样本设计我们的静态方法:通过多线程调用静态方法 - 它们可以干涉对方的输入参数
public class Helper
{
public static C Method1(List<A> aList, List<B> bList)
{
C objC = new C();
// Create ObjC based on inputs aList and bList
return objC;
}
}
现在,我的理解是,下面的调用将没有任何问题,在Parallel.foreach或任何其他多线程的情况下调用时,请确认。
C resultC = Helper.Method1(aList, bList);
然而我们有疑问,能有一种罕见的情况下可能的,其中两个线程使上述呼叫和ALIST,bList的一个线程数据被另一线程所取代,从而得到有缺陷的结果(可以是例外),因为两个线程必须在精确的毫秒内一起运行/执行,这种方法需要执行
请分享您的观点我们在正确的轨道上创建上面提到的设计或有我们无法看到的坑。我们可以很容易地通过实例方法来替换,在这种情况下它们肯定是线程安全的,因为每个线程都有自己的实例可以使用,但是我觉得可能并不需要它,并且在创建实例时很麻烦,因为我们可以方便地使用一个静态的调用。
请注意直到现在我还没有看到代码运行的问题,但正如我所说如果这种情况发生,它将是角落的情况下,两个线程来同时和一个线程替换输入参数,而其他线程仍然处理结果。
每个调用都有自己的线程 – 2015-02-06 08:41:09
调用该方法应该没有什么区别,如何使用它* may *,如果'resultC'被用作静态变量,那么可能会发生。 – Sayse 2015-02-06 08:41:34
*参数*对于多线程来说不是问题,*您传递给这些参数的可能是*,但是我们无法从您的示例中知道这一点。意思是,如果你在不同的线程上传递相同的列表对象给两个这样的方法调用,那么是的,你会遇到问题,但不是因为参数本身。 – 2015-02-06 08:42:33