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();
}