public class A
{
public int b = 0;
static public Object o = new Object();
public void fun(Object o)
{
lock (this)//把lock放在这里就锁定了,输出是开始 ,结束,开始,结束,开始,结束...
{
Console.WriteLine("线程开始,当前数值为{0}", ((A)o).b);
lock (this)//把lock放在这里失效,输出是开始,开始,开始,....结束,结束,结束...为什么?
{
((A)o).b++;
Thread.Sleep(1000);
}
Console.WriteLine("线程结束,当前数值为{0}", ((A)o).b);
}
}
}
//主函数
A a = new A();
Thread[] threads = new Thread[10];
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(a.fun);
threads[i].Start(a);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货