1.代码实例:
public class ThreadTest4
{
public static void Init()
{
//多个线程修改同一个值,使用lock锁解决并发
for (int i = 0; i < 4; i++)
{
Task.Factory.StartNew(ThreadMethod);
}
}
public static int Number = 1;
public static void ThreadMethod()
{
while (true)
{
lock (typeof(ThreadTest4))
{
Number++;
Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number);
Thread.Sleep(500);
}
}
}
}
使用lock锁前后结果对比:
使用Lock锁前,多线程修改同一数据会出现相同结果,
使用Lock锁后,修改数据保证了数据的在多个线程操作时的同步。
![](https://i-blog.csdnimg.cn/blog_migrate/2e29a1d0348a5588adabd9b02f4f89d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4667c3ff0aa08dcccf2f4ef6a37c4936.png)
2.使用Lock锁前后的性能对比:
将同一变量Number累加到30,
对于简单内容主线线程执行时间:5.8秒
多线程线程同步执行时间:5.9秒
多线程异步执行时间:1.5秒
结论异步操作性能相对性能提升明显
实例代码:
public class ThreadTest5
{
public static void Init()
{
//多个线程修改同一个值,使用lock锁解决并发
Start = DateTime.Now;
for (int i = 0; i < 4; i++)
{
Task.Factory.StartNew(ThreadMethod);
}
}
public static DateTime Start { get; set; }
public static int Number = 1;
public static void ThreadMethod()
{
while (true)
{
lock (typeof(ThreadTest4))
{
Number++;
if (Number > 30)
{
StopHandle();
}
Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number);
Thread.Sleep(200);
}
}
}
//结束处理
public static void StopHandle()
{
//结束当前线程,并输出代码执行时间
Console.WriteLine("ID={0}线程结束,结束Number={1},执行时长:{2}",Thread.CurrentThread.ManagedThreadId,
Number,
DateTime.Now-Start);
//结束当前线程
Thread.CurrentThread.Abort();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/1a958f7e11808ad57579cc7b9c1819a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5ef0de9c13959f10874b7283dfd77ec7.png)