读C#线程及线程池笔记

来源:互联网 发布:win10关闭网络唤醒 编辑:程序博客网 时间:2024/05/29 15:09

Thread:为防止主线程执行耗时的操作,需要开启一个线程运行这个操作。假设该耗时的操作为run()

1.线程的启动:

1,开启一个线程(无参数传入的情况),两种方法可以互换写

     a,Thread myThread=new Thread(run);

myThread.start();

     b,Thread myThread=new Thread(new ThreadStart(run))

myThread.start();

2,开启一个线程(有参数传入的情况

    a,Thread myThread=new Thread(run);

myThread.start(run方法的参数);

    b,Thread myThread=new Thread(new ParameterizedThreadStart(run));

myThread.start(run方法的参数);

3,利用静态类线程池 ThreadPooL 可以减少创建和销毁线程的系统开销,缩短应用程序的响应时间。

核心方法为:QueueUserWorkItem方法,它有两种重载形式,如下:

public static bool QueueUserWorkItem(WaitCallback callBack):将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。
public static bool QueueUserWorkItem(WaitCallback callBack,Object state):将方法排入队列以便执行,并指定包含该方法所用数据的对象。此方法在有线程池线程变得可用时执行。

其中WaitCallback是委托delegate类型,它的声明为:public delegate void WaitCallback(Object state)

具体用法如下:

  public class myThreadPool{

         public void run1(Object state){}

public void run2(Object state){}//因为WaitCallback的参数类型为Object,所以关联的方法也要定义Object类型的参数

public myThreadPool(){

}

public void doWork(){

ThreadPool.QueueUserWorkItem(new WaitCallback(run1));

ThreadPool.QueueUserWorkItem(new WaitCallback(run2) );

}

}

static void mian(string[] args){

myThreadPool mTP=new myThreadPool();

myThreadPool.doWork();

}


0 0
原创粉丝点击