C#进阶学习第十八天

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每次只允许一个线程访问 

猜你喜欢

转载自blog.csdn.net/JingDuiTell/article/details/88785976