1.线程工具API
1.获取线程id
private static int GetThreadId() { return Thread.CurrentThread.ManagedThreadId; }
2.线程状态,是否激活,是否还后台线程(分线程中拿当前分线程,通过Thread.CurrentThread)
//1.实例化线程 Thread thread = new Thread(() => { Console.WriteLine("线程1"); //b.分线程中拿当前分线程,通过Thread.CurrentThread Console.WriteLine("当前线程名字:" + Thread.CurrentThread.Name); Console.WriteLine("多线程thread的状态:" + Thread.CurrentThread.ThreadState); Console.WriteLine("多线程thread是否激活:"+Thread.CurrentThread.IsAlive); Console.WriteLine("多线程thread是否是后台线程:" + Thread.CurrentThread.IsBackground); thread1.Name = "Test"; });
3.实例化线程是不会主动启动,一点要记得启动线程
1.创建多线程
1.1 使用lamba表达式创建多线程
static void Main(string[] args) { Console.WriteLine($"我是主线程;{GetThreadId()}"); Test(); Console.WriteLine("主线程结束"); Console.ReadLine(); } //创建一个新线程:使用lambda表达式 public static void Test() { //创建一个新线程:使用lambda表达式 //主线程创建新线程以后,会直接执行后面的 Console.WriteLine("主线程结束"); Thread thread1 = new Thread(() => { Console.WriteLine($"我是Test线程;{GetThreadId()}"); }); thread1.Name = "Test"; thread1.Start(); }
1.2创建无参数的入口线程(相当于lamba表达式创建多线程)
static void Main(string[] args) { Console.WriteLine($"我是主线程;{GetThreadId()}"); //Test(); Test2(); Console.WriteLine("主线程结束"); Console.ReadLine(); } //创建无参数入口线程 public static void Test2() { Thread thread2 = new Thread(TestPrint); thread2.Start(); } //供线程2调用的方法 public static void TestPrint() { Console.WriteLine("我是Test2线程:"+GetThreadId()); }
1.3创建有参数的线程:new Thread(new ParameterizedThreadStart(TestPrint3))
参数类型要用object类型;传参在线程启动中传参
//创建有参数入口线程 public static void Test3() { Thread thread3 = new Thread(new ParameterizedThreadStart(TestPrint3)); thread3.Start("实际参数"); } //供线程3调用的方法 public static void TestPrint3(object str) { Console.WriteLine($"我是Test2线程:{str}" + GetThreadId()); }