一般情况下,一个应用程序有N(N>=1)个进程;每个进程有1个主线程,N(N>=1)个子线程,主线程退出,子线程就停止执行跟着退出;单核cup,操作系统通过时间片(30ms不等)轮转算法,根据优先级调度线程的执行和挂起,多核cup,可以真正实现线程的并发执行(某一时刻,同时运行多个线程)。
1、让主线程等待子线程
为了保证子线程顺利执行完成,可以调用子线程的join()方法,让主线程等待该子线程执行完成再继续往下执行。
2、开启线程
(1)Thread实例对象的start()方法,告诉操作系统可以调度次线程了,可以通过此方法向线程传递参数;
(2)用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程:
public delegate int Mydel(int para1, int para2);
static int Addfun(int pa1, int pa2)
{
return pa1 + pa2;
}
static void Main(string[] args)
{
Mydel adddel = new Mydel(Addfun);
IAsyncResult delresult = adddel.BeginInvoke(1, 2, new AsyncCallback(ProcessAfterFunExecute),"s");//异步启动一个线程
//var result = adddel.EndInvoke(delresult);//等待子线程的执行,拿到线程返回结果
Thread.Sleep(1000);
Console.Read();
}
static void ProcessAfterFunExecute(IAsyncResult result)
{
AsyncResult funAsyncResult = (AsyncResult)result;
Mydel adddel = (Mydel)funAsyncResult.AsyncDelegate;
var retval = adddel.EndInvoke(funAsyncResult);
Console.WriteLine("返回值是:" + retval + "@"+ Thread.CurrentThread.ManagedThreadId);
}
3、放弃线程
abort()方法,强制舍弃线程,内部会出现异常,尽量少使用,会造成程序性能损失
4、挂起(暂停)线程
suspend(),挂起此线程。
5、线程同步
lock()同步代码块;