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锁后,修改数据保证了数据的在多个线程操作时的同步。
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(); } }