从不同的线程访问静态方法

时间:2017-05-25 10:14:37

标签: c# static

想象一个名为foo()的静态方法需要花费大量时间来执行。此方法位于静态类中。

public static class FooClass
{
   public static void Foo()
   {
      Thread.Sleep(120000); // 2 minutes.
   }
}

我有两个同时调用此方法的同一个类的实例。由于FooClass是静态的,这是否意味着 Instance2 必须等待 Instance1 完成执行foo()(假设 Instance1 < / em>首先输入foo())?

据我所知,静态类包含一个在应用程序池中共享的实例。

2 个答案:

答案 0 :(得分:2)

不,他们不必等待。两个线程可以同时输入Foo,并且在上面的代码中,每个线程将休眠2分钟。

让一个线程在另一个线程上等待的唯一方法是添加一个同步/锁定机制,如lock关键字,或tyes MutexMonitor(仅举几例)。

答案 1 :(得分:0)

同一方法可以在“同一时间”在两个线程上运行,因此两个线程都将休眠。如果您需要确保每个调用的方法都是原子的(如果它是编辑数据),您需要使用锁。