次のコードを検討してください。
public class Test
{
public void Print()
{
lock (this)
{
System.Threading.Thread.Sleep(10000);
Console.WriteLine("Print");
}
}
public static void Somthing()
{
Console.WriteLine("Somthing");
}
}
print
メソッド Iではlock
、クラスSomthing
は静的メソッドです。呼び出しのインスタンスがないため、後で呼び出すときに、個別にスレッドを実行するSomthing
ことPrint
を期待しています。Somthing
Test
Somthing
private static void Main(string[] args)
{
var test = new Test();
test.Print();
Test.Somthing();
}
しかし、上記のコードを書くときは、Test
ロックしてから呼び出しますSomthing
。
コンパイラがこの動作をするのはなぜですか?