让那些做面试官的屌丝lead不再抖脚系列(二)---同步异步探讨->线程的一些方法

  这次我们先初步讨论下线程的一些方法,作为基础或者说就是,出个护腕武装下自己~

  1. System.Threading.Thread 类:

     不管这个线程是你刻意创建的,或者是本身就存在的,比如主线程,CLR都会为每个托管线程创建一个Thread的对象来操控线程,因此我们在做开发时候可以拿到任何我们所需要的线程句柄,或者说任何线程实例对象,这是CLR干的好事,也是面向对象语言的优势。

  

 2. thread.Join():

    这个方法可能用到的会很多,一般会看到在主线程中

  Thread thread1 = new Thread(dosth);

  thread1.Start();

  thread1.Join();

  网上提到的结果比较多,其实join()的作用就是插队,将thread1直接插队到主线程中,立刻执行出结果,然后再走下去,这里要提到的是,并不是所有join都是插队到主线程,是插队到调用执行join()这句话的线程中:

  dosth()

{

 

  Thread thread2 = new Thread(dosthelse);

  thread2.Start();

  thread2.Join();

}

这时候我们会看到的是,thread2是被插队到thread1中,其实等价于

dosth();

dosthelse();

这样的连续调用方式。


3. .Sleep() vs .Wait()

这两个的区别,其实形象化来形容下就是:

现在有2个人,要做不同的任务,A先做,B再做,但是A做着做着睡着了,B不知道,但是他知道,我一定要等A做完了再做,于是B就一直等着...

这个现象就是.Sleep()。

而A做着做着告诉B说,我要睡一觉,你不用等我了,你可以开始做你的事了,B知道了,于是B开始做任务,A就在一边睡觉。

这个现象就是.Wait()。

那专业点的解释呢?

那就是.Sleep()不会释放锁,也就是lock,(这个我们在下一章里提),不会释放系统资源,通常说法就是占着马桶不xx。

而wait()是把线程放入线程等待池,cpu可以继续干别的事情,让他去睡吧。


4. Sleep() vs Suspend()

Suspend不会马上挂起线程,而是等线程到达安全节点后再挂起,而且suspend并不是static方法,是通过某个线程自己进行调用,因此这就带来了suspend更具有目标性的特点,你可以操控某个线程进行suspend(),然后在需要他的时候通过resume()方法将他重新调起来,


值得注意的是,wait方法对应notify,suspend对应wait,而wait是在Task命名空间中的,并不是thread,notify在C#中并不存在其实,这是java的概念了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值