lock参数变化吗

多线程应用中经常使用lock,在使用这个关键字的时候,经常有个疑问,如果更改了当时的入参,那么是否会变化呢,下面通过代码实例测试一把

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             for (int i = 0; i < 3; i++)
 6             {
 7                 Console.WriteLine("------" + i + "-------");
 8                 new helpCommon().test(i);
 9             }
10 
11             Console.ReadLine();
12         }
13     }
14 
15     public class helpCommon
16     {
17         private static readonly object syncCertObj = new object();
18         public void test(int i)
19         {
20             Thread initTest = new Thread(() =>
21             {
22                 lock (syncCertObj)
23                 {
24                     Console.WriteLine("*******" + i + "*******");
25                     for (int j = 0; j < 5; j++)
26                     {
27                         Thread.Sleep(1000);
28                         Console.WriteLine("*******" + i + "*******");
29                     }
30                 }
31             });
32             initTest.Start();
33         }
34     }

主线程中发起了三个线程,但是使用通一个锁,同时改变入参 i 的值。最终结果如下

如上图所示,当lock锁住的时候,是按照顺序执行的,同时入参 i 并没有被后面的值影响到。实践出真知。

原文地址:https://www.cnblogs.com/zuimengaitianya/p/9173573.html