委托和多线程的理解
来源:互联网 发布:淘宝复制链接不弹出来 编辑:程序博客网 时间:2024/06/13 07:03
原始线:Thread
用法: Thread thread=new Thread(new ThreadStart(执行方法));
thread.Priority = ThreadPriority.BelowNormal;
thread.start();
或者:
Thread thread= new Thread(new ParameterizedThreadStart(执行方法)) ;
thread.Priority = ThreadPriority.BelowNormal;
thread.start();
讲解:Priority设置线程的优先级,start开启线程。ThreadStart不带参数的方法,ParameterizedThreadStart带一object参数的方法。
此种方法不推荐使用,创建多线的时候如果手动.Abort()的话,如果此线程正在执行状态中,强制关闭则会抛出异常。还用可能会把主线程也给卡死。
进阶线程:Task
Task task=new Task.Factory.StartNew(()=>{
要执行的方法
});
task.Result;
讲解:Task和thread本身没有多大区别,无非就是语法的不同摆了,Task的方式也就是相当于创建了一个新的线程,task.Result等待这个线程执行完返回的结果。
高手进阶篇:委托的异步线程
private delegate void FlushClient(参数1,参数2,参数3);
FlushClient flush=new FlushClient(要执行的方法参数与委托参数相同);
flush.BeginInvoke(参数1,参数2,参数3,执行的回调函数,object);
实例:
private delegate void FlushClient(Action action,int timers);//代理
public bool duge = false;
public void ExecutiveThreedStart(Action action, int timers)
{
FlushClient fc = new FlushClient(ThreadFunction);
// threed = new Thread();
fc.BeginInvoke(action,timers, null, null);
}
private void ThreadFunction(Action action, int timers)
{
while (duge)
{
action();
Thread.Sleep(timers * 1000);
}
}
讲解:BeginInvoke表示的是异步执行这个委托。
三种方式其实都是异步线程,何为异步线程就是在程序的主线程之外在创建一个子线程执行,线程之间执行相互不想干,主线程并不需要要等待子线程的执行,就是相当于跑步比赛一样,各个赛道中的人同时进行奔跑。多线程概念之中还有一个同步线程,其实就是将多个线程包装成一个模块,依次执行,就相当于有很多条赛道,第一条赛道中的人跑完,第二条赛道中的人继续奔跑,依次执行。本人还没有还没有用过同步线程,一开始觉得为何要有同步线程这个东西呢?为何不用单线程呢?其实任何一件产品被人广泛的使用都有它一定的道理,后来经过大脑一思考,终于被我想到了。如果我们创建了过多的异步线程是不是会造成服务器的开销很大呢?创建的线程大于了服务器的开销,反而会导致线程的之间的切换过于的平凡,反而会降低程序运行的效率,有可能还会导致出现异常,这样的话使用多线程是不是没有意义了呢?这个之后我们是不是可以采用同步线程来管理异步线程呢?当然以上只是我个人的观点,并没有经过实际的验证。
- 委托和多线程的理解
- 委托的理解和使用
- 深入理解C#中的委托和事件:委托的定义
- 俗人理解的事件和委托
- 理解Cocoa的委托 数据源和控制器
- C# 中的委托和事件的理解
- 理解Cocoa的委托 数据源和控制器
- IOS 协议和委托的理解
- C#中委托的理解和使用
- c#委托的理解和代码
- c#委托的理解和基础学习
- 委托的初步理解和用法
- 学习和理解C#的委托
- C#委托和多线程
- C#委托和多线程
- 多线程和委托用法
- 多线程和委托
- 多线程委托的应用
- 关于Android中的Fragment个人小结
- 网络技术基本认识
- 从图片重建3D模型
- meteor简介
- (九十八)递归(函数与函数自己)
- 委托和多线程的理解
- ubuntu开启root用户
- 深度学习系列(六):自编码网络的特征学习
- ASP+Access UTF-8 网页乱码问题解决办法
- 21世纪的编辑器 Atom
- 使用ssh无密码验证登录 公钥无效
- 超酷弦 web版PPT 基于impress.js 颠覆性在线演示应用
- unity入门教程之使用四元数旋转向量
- 如何优化MySQL insert性能