想象一个名为foo()的静态方法需要花费大量时间来执行。此方法位于静态类中。
public static class FooClass
{
public static void Foo()
{
Thread.Sleep(120000); // 2 minutes.
}
}
我有两个同时调用此方法的同一个类的实例。由于FooClass
是静态的,这是否意味着 Instance2 必须等待 Instance1 完成执行foo()
(假设 Instance1 < / em>首先输入foo()
)?
据我所知,静态类包含一个在应用程序池中共享的实例。
答案 0 :(得分:2)
不,他们不必等待。两个线程可以同时输入Foo
,并且在上面的代码中,每个线程将休眠2分钟。
让一个线程在另一个线程上等待的唯一方法是添加一个同步/锁定机制,如lock
关键字,或tyes Mutex
或Monitor
(仅举几例)。
答案 1 :(得分:0)
同一方法可以在“同一时间”在两个线程上运行,因此两个线程都将休眠。如果您需要确保每个调用的方法都是原子的(如果它是编辑数据),您需要使用锁。