namespace ConsoleApp5 { internal class Program { public static int index; static void Main(string[] args) { for (int i = 0; i < 5; i++) { Thread thread = new Thread(FuncThread); thread.Start(); } //等待所有线程执行完毕 Thread.Sleep(5000); Console.ReadKey(); } public static void FuncThread() { for (int i = 0; i < 5; i++) { index++; string threadId = string.Format("线程id:{0:D3}", Thread.CurrentThread.ManagedThreadId); string indexStr = string.Format(" {0:D3}", index); string str = threadId + indexStr; Console.WriteLine(str); } } } }
创建多线程,调用同一个资源index,不加锁 在单独的线程中会出现跳跃状态,修改代码如下
namespace ConsoleApp5 { internal class Program { public static int index; public static object threadLock = new object(); static void Main(string[] args) { for (int i = 0; i < 5; i++) { Thread thread = new Thread(FuncThread); thread.Start(); } //等待所有线程执行完毕 Thread.Sleep(5000); Console.ReadKey(); } public static void FuncThread() { for (int i = 0; i < 5; i++) { lock (threadLock)//对于引用到index(公共资源的地方加锁) { index++; string threadId = string.Format("线程id:{0:D3}", Thread.CurrentThread.ManagedThreadId); string indexStr = string.Format(" {0:D3}", index); string str = threadId + indexStr; Console.WriteLine(str); } } } } }
会得到如下结果
标签:index,string,Thread,C#,int,static,线程 From: https://www.cnblogs.com/xiaobao2017/p/18281290