zoukankan      html  css  js  c++  java
  • C# 异步编程(1)

    1、using System.Threading;

    thread1.Start();  开始线程

    thread1.Name ="" 线程名只能赋值一次

    Thread.CurrentThread.Name   当前线程名

    thread1.Join() 参数可以为毫秒也可以为TimeSpan,运行thread1线程,当有参数时如果超时返回False

    Thread.Sleep() 参数可以为毫秒也可以为TimeSpan,Thread.Sleep(0)这样调用会导致线程立即放弃本身当前的时间片,自动将cpu移交给其他线程。

    Thread.Yield() 做同样的事,但是它只会把执行交给同一处理器上的其他线程

    2、阻塞(Blocking)

    当等待Sleep或Join,线程处于阻塞状态;

    thread1.ThreadState 当前线程状态

    可以通过ThreadState这个属性来判断线程是否处于阻塞的状态

    bool blocked = (someThread.ThreadState & ThreadState.WaitSleepJoin) != 0;

    ThreadState最有用的四个枚举值是:

    Unstarted,Running,WaitSleepJoin,Stopped

    /*如果是ThreadState.Unstart | ThreadState.WaitSleppJoin |ThreadState.Stopped 则返回这些状态
    否则就是Running状态*/

    public
    static ThreadState SimpleThreadState (ThreadState ts) { return ts & (ThreadState.Unstart | ThreadState.WaitSleppJoin | ThreadState.Stopped); }

    3、解除阻塞

    当满足下面四种情况时,就会解除阻塞

    1、阻塞条件被满足

    2、操作超时(如果设置超时的话)

    3、通过Thread.Interrupt()进行打断

    4、通过Thread.Abort()进行中止;

    4、阻塞和忙等待(自旋) Blocking vs Spinning

    IO-bound操作的工作方式有两种:

    在当前线程上同步的等待:Console.ReadLine() ,Thread.Sleep(), Thread.Join()...

    异步的操作,在稍后操作完成时触发一个回调动作。

    同步等待的I/O-bound操作将大部分时间花在阻塞线程上。

    他们也可以周期性的在一个循环里进行“打转(自旋)”

    while(DateTime.Now < nextStartTime)

    Thread.Sleep(100);

    while (DateTime.Now < nextStartTime);

  • 相关阅读:
    solr 使用
    深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式
    深入理解java虚拟机(一)
    获取请求体数据 POST
    获取请求头数据
    Servlet之Request和Response 解析
    Servlet 之 Http协议
    Servlet 体系结构
    如何修改servlet的创建时机?
    Java Web servlet 详解
  • 原文地址:https://www.cnblogs.com/zuiailiuruoying/p/14791783.html
Copyright © 2011-2022 走看看