0 .查看当前的线程信息:Thread.CurrentThread.属性
1 private static Thread subthread ; 2 private static Thread subthread1; 3 static void Main(string[] args) 4 { 5 Thread.CurrentThread.Name = "Main线程"; 6 Console.WriteLine(Thread.CurrentThread.Name); 7 //开启了一个新的线程 8 subthread = new Thread(new ThreadStart(GetShow)); //无参数的入口方法线程 9 subthread.Start(); //开启线程10 subthread.Name = "无参数的入口方法线程";11 //又开启了一个线程12 subthread1 = new Thread(new ParameterizedThreadStart(GetShow)); //有参数的入口方法线程13 subthread1.Start("实际参数");//开启线程传参14 subthread1.Name = "有参数的入口方法线程";15 16 Console.WriteLine("主线程结束");17 }18 19 static void GetShow()20 {21 22 Console.WriteLine(Thread.CurrentThread.Name);23 Console.WriteLine("执行无参数的方法");24 }25 26 static void GetShow(object obj)27 {28 Console.WriteLine(Thread.CurrentThread.Name);29 Console.WriteLine("执行有参数的方法,传参为:" + (string)obj);30 }31 }
一. Sleep()阻塞线程休息方法的使用情况:
Thread.Sleep()方法用于使当前线程暂停指定的时间,然后去执行流程语句。
他的意思是,你可以让某个线程先“谢谢”,让其他的兄弟先干活,他歇息“一会儿”后再干活
1 // 参数: 2 // millisecondsTimeout: 3 // 线程被阻塞的毫秒数。 指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 指定 System.Threading.Timeout.Infinite 4 // 以无限期阻止线程。 5 // 6 public static void Sleep(int millisecondsTimeout); 7 // 参数: 8 // timeout: 9 // 设置为线程被阻塞的时间量的 System.TimeSpan。 指定零以指示应挂起此线程以使其他等待线程能够执行。 指定 System.Threading.Timeout.Infinite10 // 以无限期阻止线程。11 public static void Sleep(TimeSpan timeout);
常用于需要开启一个不停执行某个操作,进行循环时候,需要对Thread进行阻塞,减少计算机资源的消耗,和合理的控制程序逻辑的执行。
1 private static Thread subthread ; 2 static void Main(string[] args) 3 { 4 Thread.CurrentThread.Name = "Main线程"; 5 //无参数的入口方法线程;原本的结果哈,是争相恐后的干活,现在 6 //GetShow的这个方法里先“等”10s,等过了10s再执行数据。 7 //subthread相当于“卡”了10s 8 subthread = new Thread(new ThreadStart(GetShow)); 9 subthread.Start(); //开启线程10 subthread.Name = "无参数的入口方法线程";11 12 Console.WriteLine("主线程结束");13 }14 15 static void GetShow()16 {17 while (true)18 {19 Console.WriteLine(Thread.CurrentThread);20 Console.WriteLine("进行数据同步");21 Thread.Sleep(10000);//阻塞10000进行一次数据的同步22 }23 }
二. Interrupt() 唤醒休眠中的线程的方法
Interrupt这个词的意思是 中断;打断;插嘴;妨碍 | vi. 打断...
1 class Program 2 { 3 private static Thread subthread ; 4 static void Main(string[] args) 5 { 6 Thread.CurrentThread.Name = "Main线程"; 7 //无参数的入口方法线程 在方法里睡了十秒; 8 //但是在他睡的十秒的同时,主线程还在继续工作呀 9 //就继续执行下面的for循环,但是for循环每次输入1s10 //一共就用了5s;11 //应为程序是从上而下读取的12 //所以下一步就调用的 subthread.Interrupt();这个方法13 //但是,刺客的 subthread这个线程才睡了5s,所以就会被唤醒,然后结束14 subthread = new Thread(new ThreadStart(GetShow)); 15 subthread.Name = "无参数的入口方法线程";16 subthread.Start(); //开启线程17 for (int i = 1; i <= 5; i++)18 {19 Thread.Sleep(1000);20 Console.WriteLine("第{0}秒",i);21 }22 subthread.Interrupt();23 24 Console.WriteLine("主线程结束");25 }26 27 static void GetShow()28 {29 Console.WriteLine("名称"+Thread.CurrentThread.Name);30 try31 {32 Console.WriteLine("休息十秒");33 Thread.Sleep(10000);34 }35 catch (Exception ex)36 {37 Console.WriteLine("线程被唤醒,只休息了5秒");38 Console.WriteLine(ex.Message);39 }40 Console.WriteLine(Thread.CurrentThread.Name);41 }42 }
注意:
线程在休眠的那一刻,被唤醒时,Thread.Sleep()方法会抛出异常,所有要用 try { }catch (Exception ex){ }包起来;
线程在没有休眠的那一刻被唤醒,在后面某一端时间休眠后Thread.Sleep()方法会抛出异常,所有进行 try { }catch (Exception ex){ }异常处理,避免程序死掉。
有点扭嘴,意思就是try catch 避免程序死掉。