复习及总结--.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
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关键字
复习及总结--.Net线程篇(3)的更多相关文章
- 复习及总结--.Net线程篇(2)
复习总结 上一篇里讲到了使用委托异步调用的方式来使用多线程,这里介绍几个概念 这里贴出来一个关于应用程序域的帖子 http://www.cnblogs.com/firstyi/archive/2008 ...
- 复习及总结--.Net线程篇(1)
老是没耐心写这些东西,最近想想也工作两年了,该对自己的东西做个整理了,不知道这次能坚持写几篇,总得来说尽量督促自己吧 言归正传,.net中的多线程主要可以使用两种方法进行调用 1,异步调用 2,Thr ...
- 复习及总结--.Net线程篇(4)
这里要说的就是多线程的锁的问题了 锁:作用在于实现线程间的同步问题,最典型的是售票问题 1,InterLocked 提供的都是静态方法,用来同步对多个共享变量的访问,包括以原子方式递增,递减,比较和替 ...
- JAVA技术专题综述之线程篇(1)
本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield( ...
- Java面试知识点之线程篇(三)
前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...
- Java面试知识点之线程篇(二)
前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...
- Java面试知识点之线程篇(一)
前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...
- Python3 与 C# 并发编程之~ 线程篇
2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...
- 【转】C#线程篇
C# 温故而知新: 线程篇(一) C# 温故而知新: 线程篇(二) C# 温故而知新:线程篇(三) C# 温故而知新: 线程篇(四)
随机推荐
- 安装 percona-xtrabackup 2.4
Installing Percona XtraBackup from Percona yum repository Install the Percona repository You can ins ...
- MySQL —— 如何快速对比数据?
我们在MySql中想要对比下两个不同的实例上的数据并且找出差异,除了主键之外我们还要对比每一个字段,应该怎么做呢? 方案一:写一个程序将两个实例里面的每一行数据都分别取出来对比,但是耗时我们无法估计, ...
- Windows2008 R2下,应用程序池 'XXXXXXXX' 被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。
转:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.html http://www.hack001.com/post/151
- Redis全方位讲解--主从复制(转载)
前言 前面介绍了redis持久化和容灾备份,这篇会介绍redis主从复制和redis持久化在主从复制中的一些应用.因为本人没有那么多服务器或机器,所以这里主要介绍下如何在docker容器中搭建主从复制 ...
- spring4.3+mybatis3.4+freemark+log4j2+fastjson整合
2017-7-1 更新 spring 版本 4.3.9 更新mybatis 为3.4.3 0.先写下文件结构防止配置放错地方 1.首先发下maven配置 <properties> < ...
- C#:文件操作(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- SEH, SAFESEH相关
SEH, SAFESEH相关 1,触发seh异常让目标程序Read/Write无效地址,如果和栈底相邻的内存只读,尝试覆盖超出栈底 2,如何找到(显示)要覆盖的SEHod语法:dd fs:[0]sof ...
- [Windows驱动开发](三)基础知识——驱动例程
一.NT式驱动的基本例程 1. 驱动入口函数——DriverEntry // 驱动程序的一般性定义 NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObje ...
- 关闭危害的端口DOS命令(转载)
rem ipseccmd -w REG -p "HFUT_SECU" -r "Block UDP/137" -f *+0:137:UDP -n BLOCK -x ...
- vue使用axios,进行网络请求
1.首先自己创建一个组件: https://www.cnblogs.com/fps2tao/p/9559291.html 2.安装:axios(可以npm安装,也可以下载js引入文件) npm ins ...