class Class1 { public int i = 5; public void Cooo() { this.i++; if (this.i == 5) { Console.WriteLine("我可能会被输出"); } this.i = 5; } } static void CallFunc(object obj) { Class1 o = obj as Class1; while (true) { o.Cooo(); } } Class1 c = new Class1(); Thread go1 = new Thread(CallFunc); go1.Start(c); Thread go2 = new Thread(CallFunc); go2.Start(c);
此时,“我可能会被输出”真的会输出
从程序设计来看,这句话是不可能被输出的
但是,这里开启两个线程后,共享了这份内存
时间线变成了两条,不在是顺着,有可能在i++之后,另一个线程修改i=5,此时再到回到这个线程,判断i确实=5