多线程编程(1)
2010-11-15 17:50 Clingingboy 阅读(1439) 评论(0) 编辑 收藏 举报为了以后忘记以后可以再看,所以记录下.
主线程
程序开始后将有一个主线程,即
Thread.CurrentThread
一个简单的示例,阻塞当前线程
class Program { static void Main(string[] args) { Console.WriteLine(DateTime.Now); Thread.Sleep(5000); Console.WriteLine(DateTime.Now); } }
创建一个线程
public class Demo1 { private Thread thread1; private Thread thread2; public Demo1() { thread1 = new Thread(new ThreadStart(Task1)); thread2 = new Thread(new ThreadStart(Task2)); thread1.Start(); thread2.Start(); } public void Task1() { Console.WriteLine("Code By Developer"); } public void Task2() { Console.WriteLine("Test By Tester"); } }
这里创建了2个线程,然后调用Start方法启动线程.
阻塞内部线程(非主线程)
修改上面程序,阻塞第1个线程
public void Task1() { Console.WriteLine(DateTime.Now); Thread.Sleep(5000); Console.WriteLine(DateTime.Now); Console.WriteLine("Code By Developer"); } public void Task2() { Console.WriteLine("Test By Tester"); }
可以看到两个线程互不影响
为什么要使用线程
我想能不用线程就不要用,因为线程很复杂.凡事复杂的东西均隐藏在背后,一切都是为了让客户感受到更加简单。
Windows操作系统是多进程了,为什么要多进程?那么你可以一边上网,一边听歌,一边聊天。否则这3件事情你只能选择1个。你愿意怎么样的方式?
多线程也是一样,想象一下,很少人看到公司老板在写程序吧?
老板犹如公司的主程序一般,他忙不过来,必须把任务分担出去,让某某人编码,让某某人搞测试,一个公司的运作就犹如一个程序。
人是怎么做事的
若有3件事1个人的话,只能一件一件事做,无法分身。
若有3件事3个人的话,那么可以1个人做1件事。人多好办事。
OK,先不要想的太复杂,都是可以以现实生活来表达呢。抛弃难懂的理论。
线程优先级
假设你到一家餐馆,厨师负责烧菜,营业员负责端菜。营业员就端不了菜。那么厨师烧菜的优先级就要比较高.
其实比较常见的就是我们下载电影时,你肯定会挑你喜欢的看优先下载的,同时也会开着其他下载
示例代码如下
public class Demo1 { private Thread thread1; private Thread thread2; public Demo1() { thread1 = new Thread(new ThreadStart(Task1)); thread2 = new Thread(new ThreadStart(Task2)); thread1.Priority = ThreadPriority.Highest; thread2.Start(); thread1.Start(); } public void Task1() { for (int i = 0; i < 10; i++) { Console.WriteLine("Download Moive"); } } public void Task2() { for (int i = 0; i < 10; i++) { Console.WriteLine("Download Book"); } } }
结果,虽然第2个线程先开始启动,但还是第1个线程的任务先完成,当然设置不同线程的优先级效果会不同
挂起(Suspend)和恢复(Resume)线程
- 你在工作的时候,在以下情况下会停下手头的工作,比如中午吃饭,上厕所.完事以后则以后回来工作.
- 老板有其他工作给你做,你必须把手头工作停下,完成后继续做原先的事
总而言之需要停下当前工作,之后恢复,示例如下
private Thread thread1; public Demo1() { thread1 = new Thread(new ThreadStart(Task1)); thread1.Start(); thread1.Suspend(); Console.WriteLine("Stop"); Thread.Sleep(1000); Console.WriteLine("Begin"); thread1.Resume(); } public void Task1() { Console.WriteLine("Working"); }
结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-11-15 魅族m8开发 step by step(3)(BasicControl)