博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程小结(2)
阅读量:5338 次
发布时间:2019-06-15

本文共 4279 字,大约阅读时间需要 14 分钟。

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     }
View Code

一. 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);
View Code

常用于需要开启一个不停执行某个操作,进行循环时候,需要对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         }
View Code

二. 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     }
View Code

 

注意:

线程在休眠的那一刻,被唤醒时,Thread.Sleep()方法会抛出异常,所有要用 try { }catch (Exception ex){ }包起来;

线程在没有休眠的那一刻被唤醒,在后面某一端时间休眠后Thread.Sleep()方法会抛出异常,所有进行 try { }catch (Exception ex){ }异常处理,避免程序死掉。

有点扭嘴,意思就是try catch 避免程序死掉。

 

转载于:https://www.cnblogs.com/ZkbFighting/p/9030514.html

你可能感兴趣的文章
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>