標籤:user 結果 lis space 通過 div ges alt eric
lock鎖的是地址
而.net有內部機制使得相同的字串記憶體位址是相同的(new string)除外
下面上實驗代碼
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ConsoleApp5{ class Program { static void Main(string[] args) { List<string> keyList = new List<string> { "key1","key2", "key1", "key1", "key1", "key1", }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } } public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上鎖2s key="+key); Thread.Sleep(2000); Console.WriteLine("解鎖"); } } }}
運行
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ConsoleApp5{ class Program { static void Main(string[] args) { List<string> keyList = new List<string> {new string(‘k‘,1), new string(‘k‘, 1), new string(‘k‘, 1), new string(‘k‘, 1) }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } } public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上鎖2s key="+key); Thread.Sleep(2000); Console.WriteLine("解鎖"); } } }}
通過new字串得出的運行結果
通過鎖字串達到控制並發的效果C#