复习及总结--.Net线程篇(3)
2013-12-04 19:22
218 查看
不幸的发现,原来多线程的东西还有好多。
不只是一个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属性
其他方法:
Sleep 当前线程休眠指定的时间
Join 当指定的线程被执行完成,或者终止后继续调用线程
Abord 终止前程
Start 开始执行某个线程
以上是Thread类的基本介绍
接下来讲讨论一下线程锁的机制也就是Lock关键字
不只是一个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
Thread.AllocateDataSlot();//在现有现存的线程上分配未命名的数据槽,数据槽是用来存放特定于线程的数据的本地内存尸体,使用该方法的数据槽将在线程到期时被释放 Thread.AllocateNamedDataSlot("ThreadName");//在所有现存的线程上分配命名的数据槽,命名的数据槽必须被显示的释放 Thread.FreeNamedDataSlot("ThreadName");//释放以前分配的命名数据槽 Thread.GetData(new LocalDataStoreSlot());//为当前域检索当前线程指定的数据槽中存储的对象 Thread.GetNamedDataSlot("ThreadName"); //检索指定的命名的数据槽 Thread.SetData(new LocalDataStoreSlot(), "|");//为此线程的当前域把指定的对象存放在当前运行的线程指定的数
其他方法:
Sleep 当前线程休眠指定的时间
Join 当指定的线程被执行完成,或者终止后继续调用线程
Abord 终止前程
Start 开始执行某个线程
以上是Thread类的基本介绍
接下来讲讨论一下线程锁的机制也就是Lock关键字
相关文章推荐
- 百度笔试题:找最小的不重复数
- /usr/libexec/mysqld: Can’t create/write to file ‘/tmp/’ (Errcode: 13)
- 黑马程序员:Java编程_语法基础
- 基于蓝牙4.0的蓝牙打印机 低耗电蓝牙 BLE (Bluetooth Low Energy)
- 在博客园使用 MarkDown写blog
- 1012:外币兑换
- CPtrList操作(插入,删除特定元素,删除全部)
- Spring核心技术阐述(IOC、DI、AOP)
- Java备忘录模式(Memento)
- UVa 11028 Sum of Product (A007773,你懂的)
- windows server 2008 设置多用户同时远程登录(图解一)
- 安卓中各种Adapter的用法
- 关于更安全的密码加密方式
- Shell编程之参数引用
- 获取csv文件中最后一行的第三个数值案例
- oracle存储过程含参数的插入数据
- 用Python的Tkinter实现时钟
- 1009:财务管理
- 关于ubuntu系统下 sudo 免密码输入
- Genesis-3D 入门教程—20.脚本控制与分割动画