C#多线程实例
来源:互联网 发布:电子书资源 知乎 编辑:程序博客网 时间:2024/06/01 10:47
(1)关于线程
线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。
如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。
(2)关于线程同步
C#线程同步可用lock(this){ //代码块 }
线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。只能一个一个进入,异步是两个线程同时进入进行操作。
同步是牺牲了执行效率来换取数据的安全(完整性),异步操作执行效率才是最高的
(3)所以想提高效率,只有把一个任务分成多个任务,然后开多个线程分别去执行这几个任务
如果不分任务都去执行这个大任务,实际上是把这个大任务执行了多次(而且不同步的话数据可能出错)
以下为实例:
(sum=-500000000 计算-500000000累加到500000000需要5秒 分成两个任务开两个线程去执行时间减少一半)
private void thread_Click(object sender, EventArgs e) { long sum; Console.WriteLine("开始时间:"+ DateTime.Now); MyThread myThread1 = new MyThread(-500000000, 0); ThreadStart childref1 = new ThreadStart(myThread1.CallToChildThread); Thread childThread1 = new Thread(childref1); MyThread myThread2 = new MyThread(0, 500000000); ThreadStart childref2 = new ThreadStart(myThread2.CallToChildThread); Thread childThread2 = new Thread(childref2); childThread1.Name = "线程A"; childThread2.Name = "线程B"; childThread1.Start(); childThread2.Start(); childThread1.Join(); childThread2.Join();//Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止 // 停止主线程一段时间 //Thread.Sleep(20000); // 现在中止子线程 // Console.WriteLine("In Main: Aborting the Child thread"); // childThread1.Abort(); //Console.ReadKey(); sum=myThread1.sum + myThread2.sum; }
public class MyThread { private long i; public long sum=0; private int iCol; private int iRow; private long start; private long end; public MyThread(long start,long end) { this.start = start; this.end = end; } public void CallToChildThread() { for (i = start; i < end; i++) { //同步的话执行效率变慢 // Thread.Sleep(1); //加上sleep后才真正实现同步 //Console.WriteLine(Thread.CurrentThread.Name + i); sum += i; } Console.WriteLine(Thread.CurrentThread.Name +"结束"+DateTime.Now); Console.WriteLine(Thread.CurrentThread.Name + "结束"); }}
阅读全文
0 0
- C#多线程实例
- c# 多线程实例
- C#多线程赛跑实例
- C#多线程简单实例
- C#多线程实例
- C#多线程编程实例实战
- C#多线程编程实例实战
- C#多线程编程实例实战
- C#多线程编程实例实战
- C#多线程编程实例实战
- C#多线程应用技术入门实例
- C#多线程编程简单实例
- C#多线程编程实例实战
- C#多线程编程实例实战
- C# Socket多线程编程实例
- C# Socket多线程编程实例
- C#多线程编程实例实战
- C#多线程编程实例实战
- 在单用户模式下修改CentOS的root密码
- BaseCode之文件工具类:FileUtil.java
- 文章标题
- Android学习--底部导航Fragment填充
- jsp数据交互(一)
- C#多线程实例
- 217. Contains Duplicate
- SpringBoot数据库密码动态配置
- Android6.0中ART执行类方法的过程分析一
- 更新XCode 8.3 以后XVim编译失败解决方法
- web服务器集群session同步、共享的几种方法
- 汇编语言: .根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民 身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依 次为:六位数字地
- 170607 pyhon忽略警告
- jsp的编译流程