黑马程序员技术交流社区

标题: 线程、进程和应用程序域的问题 [打印本页]

作者: 管章鹏    时间: 2013-4-1 20:39
标题: 线程、进程和应用程序域的问题
本帖最后由 管章鹏 于 2013-4-2 08:08 编辑

Thread和Process之间有什么区别么?最近在学习多线程,搞不明白他们之间应该怎么去用,还有.NET新引入了Application Domain的概念,这样他们三个之间有什么区别么?求大神予以解答。。。。。。
作者: 杜磊    时间: 2013-4-1 22:37
1.一个进程可以有多个应用程序域,而应用程序域在创建的时候会默认创建三个域:系统域,共享域,默认域(开发人员写的所有的代码在此域上执行)。注意:域的概念只有在DotNet程序下才有。
程序一运行,就有一个默认的主进程,有一个默认的主域,主域下面有一个默认的主线程,也就是Main()方法。

2.初始化一个线程Thread thread=new Thread(要执行的无参无返回值的方法);
启动线程:thread.Start();
设置线程是否是前台线程:thread.IsBackground=true;
如果设为true标识当前线程为后台线程。
给线程起名字:thread.Name("开发人员用的");
给线程设置优先级:thread.Priority=ThreadPriority.AboverNormal;优先级最高。
关闭线程:thread.Abort();
等待线程执行结束:thread.Join();//哪个线程调用此方法,就是让哪个线程等待thread线程。
BeginInvoke();//启动一个新的线程,新的线程回调函数指向委托的方法。(属于后台线程,此线程是由.net提供的线程池提供)。var result=addDel.BeginInvoke();
如何去拿另外一个线程执行方法的结果?
int retVal=addDel.EndInvoke(result);

3.当一个委托被多个线程重复使用,会产生溢出怎么办?用lock()方法来锁定这个委托对象,一旦对象被锁定之后,那么就只能有一个线程可以访问这个委托对象。

4.线程池的概念。ThreadPool。QueueUserWorkItem();使用线程池会极大的提高线程的使用效率。
线程池默认最小4个,最大是1024个线程。

1.在C与C++语言中,函数指针没有约束,可以指向任何函数,而C#语言中的委托则只能指向单独格式的方法签名的方法。

2.扩展方法的复习:静态类,静态方法,this关键字。
在定义扩展方法的时候,不管是方法签名,还是返回值和参数,都要定义好List<T>,不能省略,在使用的时候方法可以省略List<T>.


一些浅略的笔记,希望可以帮到你。
作者: 管章鹏    时间: 2013-4-2 08:08
杜磊 发表于 2013-4-1 22:37
1.一个进程可以有多个应用程序域,而应用程序域在创建的时候会默认创建三个域:系统域,共享域,默认域(开 ...

学习了,谢谢哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2