Dictionary lock
using System; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Collections.Concurrent; namespace Test { class Program { private static object objLock = new object(); private static Dictionary<int, string> dict = new Dictionary<int, string>();
public static void AddItem1() { lock (objLock) { Console.WriteLine("AddItem1()开始添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 10; i < 20; i++) { dict.Add(i, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Thread.Sleep(TimeSpan.FromMilliseconds(1000)); } Console.WriteLine("AddItem1()结束添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } Console.WriteLine("AddItem1()退出方法体... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n"); } public static void AddItem2() { lock (objLock) { Console.WriteLine("AddItem2()开始添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 50; i < 60; i++) { dict.Add(i, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Thread.Sleep(TimeSpan.FromMilliseconds(1000)); } Console.WriteLine("AddItem2()结束添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } Console.WriteLine("AddItem2()退出方法体... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n"); } private static ConcurrentDictionary<int, string> conDict = new ConcurrentDictionary<int, string>(); public static void AddItem3() { Console.WriteLine("AddItem3()开始添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 10; i < 20; i++) { conDict.TryAdd(i, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Thread.Sleep(TimeSpan.FromMilliseconds(1000)); } Console.WriteLine("AddItem3()结束添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Console.WriteLine("AddItem3()退出方法体... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n"); } public static void AddItem4() { Console.WriteLine("AddItem4()开始添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 50; i < 60; i++) { conDict.TryAdd(i, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Thread.Sleep(TimeSpan.FromMilliseconds(1000)); } Console.WriteLine("AddItem4()结束添加... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Console.WriteLine("AddItem4()退出方法体... " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n"); } static void Main() { var task1 = Task.Factory.StartNew(() => { AddItem1(); }); var task2 = Task.Factory.StartNew(() => { AddItem2(); }); Task.WaitAll(task1, task2); Console.WriteLine("Dictionary<int, string> dict = new Dictionary<int, string>();"); Console.WriteLine(dict.Count.ToString()); foreach (var item in dict) { Console.WriteLine("{0} - {1}", item.Key, item.Value); } Console.WriteLine("AddItem1,2执行完成"); //Console.ReadLine(); Task task3 = Task.Factory.StartNew(() => { AddItem3(); }); task3.Wait(); Console.WriteLine("t3:" + conDict.Count.ToString() + "\n"); foreach (var item in conDict) { Console.WriteLine("{0} - {1}", item.Key, item.Value); } Task task4 = Task.Factory.StartNew(() => { AddItem4(); }); task4.Wait(); Console.WriteLine("\n"); Console.WriteLine("ConcurrentDictionary<int, string> conDict = new ConcurrentDictionary<int, string>();"); Console.WriteLine("ht:" + conDict.Count.ToString()); foreach (var item in conDict) { Console.WriteLine("{0} - {1}", item.Key, item.Value); } Console.WriteLine("AddItem3,4执行完成"); Console.ReadLine(); } } }
打印运行结果:
/* AddItem1()开始添加... 2016-08-21 16:48:02 AddItem1()结束添加... 2016-08-21 16:48:12 AddItem1()退出方法体... 2016-08-21 16:48:12 AddItem2()开始添加... 2016-08-21 16:48:12 AddItem2()结束添加... 2016-08-21 16:48:23 AddItem2()退出方法体... 2016-08-21 16:48:23 Dictionary<int, string> dict = new Dictionary<int, string>(); 20 10 - 2016-08-21 16:48:02 11 - 2016-08-21 16:48:03 12 - 2016-08-21 16:48:04 13 - 2016-08-21 16:48:05 14 - 2016-08-21 16:48:06 15 - 2016-08-21 16:48:07 16 - 2016-08-21 16:48:08 17 - 2016-08-21 16:48:09 18 - 2016-08-21 16:48:10 19 - 2016-08-21 16:48:11 50 - 2016-08-21 16:48:12 51 - 2016-08-21 16:48:13 52 - 2016-08-21 16:48:14 53 - 2016-08-21 16:48:15 54 - 2016-08-21 16:48:16 55 - 2016-08-21 16:48:18 56 - 2016-08-21 16:48:19 57 - 2016-08-21 16:48:20 58 - 2016-08-21 16:48:21 59 - 2016-08-21 16:48:22 AddItem1,2执行完成 AddItem3()开始添加... 2016-08-21 16:48:23 AddItem3()结束添加... 2016-08-21 16:48:33 AddItem3()退出方法体... 2016-08-21 16:48:33 t3:10 10 - 2016-08-21 16:48:23 11 - 2016-08-21 16:48:24 12 - 2016-08-21 16:48:25 13 - 2016-08-21 16:48:26 14 - 2016-08-21 16:48:27 15 - 2016-08-21 16:48:28 16 - 2016-08-21 16:48:29 17 - 2016-08-21 16:48:30 18 - 2016-08-21 16:48:31 19 - 2016-08-21 16:48:32 AddItem4()开始添加... 2016-08-21 16:48:33 AddItem4()结束添加... 2016-08-21 16:48:43 AddItem4()退出方法体... 2016-08-21 16:48:43 ConcurrentDictionary<int, string> conDict = new ConcurrentDictionary<int, string>(); ht:20 10 - 2016-08-21 16:48:23 11 - 2016-08-21 16:48:24 12 - 2016-08-21 16:48:25 13 - 2016-08-21 16:48:26 14 - 2016-08-21 16:48:27 15 - 2016-08-21 16:48:28 16 - 2016-08-21 16:48:29 17 - 2016-08-21 16:48:30 18 - 2016-08-21 16:48:31 19 - 2016-08-21 16:48:32 50 - 2016-08-21 16:48:33 51 - 2016-08-21 16:48:34 52 - 2016-08-21 16:48:35 53 - 2016-08-21 16:48:36 54 - 2016-08-21 16:48:37 55 - 2016-08-21 16:48:38 56 - 2016-08-21 16:48:39 57 - 2016-08-21 16:48:40 58 - 2016-08-21 16:48:41 59 - 2016-08-21 16:48:42 AddItem3,4执行完成 */

浙公网安备 33010602011771号