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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值