复习及总结--.Net线程篇(3)
不幸的发现,原来多线程的东西还有好多。
不只是一个Thread就能把事情做完的,好吧,孤陋寡闻了
这里总结下 复习及总结--.Net线程篇(2)里的两个概念AppDomain和ThreadPool
AppDomain:作用是为了隔离程序集之间的线程,打个比方吧,
现在有100个人(线程)同时工作,有50个人(线程)不想干了,说要辞职,那么这样肯能会影响到另外的50个人,那么公司(操作系统)就使用AppDomain这个东西来隔离这50个不想做事的人
这就是AppDomain的作用
ThreadPool: 让频繁创建的线程有一个归属,不用每次都在用某个线程的时候都去创建,提高了性能
再打个比方,我们要链接数据库,这个时候就牵扯到了频繁的创建数据库链接,数据库链接数量,信息对应用程序来说是固定的,所以没必要再使用一次就创建一次,这样效率会很底下
同时,数据库链接并不是始终都在保持链接的,所以,MS就使用了一个叫链接池的概念,这里的线程池和连接池很类似
开始本篇的主题 Thread
先介绍两个委托
1,ParameterizedThreadStart
该委托签名为 delegate void ParameterizedThreadStart(Object param),
作用是给Thread的构造函数传入一个包含参数的方法签名
2,ThreadStart
该委托签名为 delegate void ThreadStart(),
作用是给Thread构造函数传入一个不带参数且无返回值的方法签名
Thread属性
三个静态属性 // Thread.CurrentContext //获取当前线程的上下文 // Thread.CurrentPrincipal //获取当前线程的负责人 // Thread.CurrentThread //获取当前线程的引用
实例属性 Thread t1 = new Thread(Main); //t1.ApartmentState //设置单元状态,决定线程在单线程下执行还是在多线程下执行 //t1.IsAlive //在线程已启动并仍然活动的情况下返回True //t1.IsBackground//是否为后台线程,前后台的不同在于:它不必在调用它的进程结束前完成执行或被终止 //t1.Name //线程名称 //t1.Priority 线程优先级 //t1.ThreadState 返回线程的状态,默认情况是UnStarted
1 Thread.AllocateDataSlot();//在现有现存的线程上分配未命名的数据槽,数据槽是用来存放特定于线程的数据的本地内存尸体,使用该方法的数据槽将在线程到期时被释放 2 Thread.AllocateNamedDataSlot("ThreadName");//在所有现存的线程上分配命名的数据槽,命名的数据槽必须被显示的释放 3 Thread.FreeNamedDataSlot("ThreadName");//释放以前分配的命名数据槽 4 Thread.GetData(new LocalDataStoreSlot());//为当前域检索当前线程指定的数据槽中存储的对象 5 Thread.GetNamedDataSlot("ThreadName"); //检索指定的命名的数据槽 6 7 8 Thread.SetData(new LocalDataStoreSlot(), "|");//为此线程的当前域把指定的对象存放在当前运行的线程指定的数
其他方法:
Sleep 当前线程休眠指定的时间
Join 当指定的线程被执行完成,或者终止后继续调用线程
Abord 终止前程
Start 开始执行某个线程
以上是Thread类的基本介绍
接下来讲讨论一下线程锁的机制也就是Lock关键字