using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class Program
{
static void Main(string[] args)
{
var ins= new TestClass();
for (int i = 0; i < 100; i++)
{
Task.Factory.StartNew(() =>
{
ins.test();
});
}
Console.ReadLine();
}
}
public class TestClass {
public static int num = 0;
static object lockObjStatic = new object();
object lockObj = new object();
public void test()
{
object lockObjtemp = new object();
//lockObjtemp 无论是否同一个对象,锁都不起作用
//lockObj 同一个对象下锁起作用,不通的对象下锁不起作用
//lockObjStatic 不管同一个对象还是非同一个对象锁都起作用
lock (lockObjStatic) //正常用锁的时候,一定要锁定私有静态字段
{
add();
}
}
public void add()
{
num++;
Console.WriteLine(TestClass.num);
}
}
}