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执行完成
 
*/

 

posted @ 2016-08-21 16:48  茗::流  阅读(287)  评论(2)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。