1.线程与进程
程序执行后默认会生成一个主线程。新创建的线程叫做子线程
两个方法会在主线程中排队执行
进程:就指程序
线程:指程序中代码执行的一个序列
多线程:生成一个新的线程,在新的线程中去执行另外一个操作,多个线程可以同时执行
注:
1.一个进程至少有一个主线程
2.两个线程启动不分先后,结束不分先后,看CPU分配资源
3.进程有独立的内存单元,多个线程共享内存
4.把耗费资源的操作用子线程执行,避免主线程堵塞
5.程序必须在所有前台线程完成后才可以退出,后台线程在程序退出时自动结束
6.设置为后台线程
Thread t = new Thread(fun2); t.IsBackground = true;
7.使得子线程能够完成
1.给主线程睡眠 Thread.Sleep (3000); //睡眠当前线程3秒,单位毫秒
2.将子线程设置为前台线程。 t.IsBackground = false; //默认false
3.给后台线程添加join方法。 t.jion()
2.线程池
1.用来存放使用的线程集合,有利于管理线程
2.默认都是后台线程
3.线程池中的方法要跟委托类型一致 public delegate void WaitCallback (object state);
在线程池自动生成新的线程去执行这些方法 ThreadPool.QueueUserWorkItem(fun1,参数);
4.将线程池里的线程改为前台线程
Thread mt = Thread.CurrentThread; //获取当前线程
Mt. IsBackground = false; //设置成前台线程3.
3.线程同步技术
public static int tickes = 100;
public static object o = new object ();
public static void gettickes()
{ //通过monitor监视共享资源,在监视过程中,另一个线程会等待其它线程
//使用try finally 可以正确退出监视
while (true)
{ try
{ Monitor.Enter (o); //开始监视
//当某个线程监视某个资源时,其他的线程就不可以监视该资源
//对等待那个线程监视结束后才可以开始监视
if (tickes != 0)
{ Console.WriteLine ("p1 get " + tickes--);}
else {break;}
}
finally {Monitor.Exit (o); //退出监视}
} //坏处:1繁琐必须包装共享数据,2影响性能,3每次只允许一个线程访问