Thread类的简单使用(Start,Sleep,Join,传参)
2011-11-12 22:28
1046 查看
Thread 类创建并控制线程,设置其优先级并获取其状态。下面以4个例子介绍一下Thread类的常用方法:
1. Start——启动线程。
![](http://pic002.cnblogs.com/images/2011/287970/2011111223495722.jpg)
可以看到,NewThread启动后,与MainThread相互竞争使用CPU。这就是Windows系统的抢占式CPU竞争策略。
2. Sleep——将当前线程挂起指定的时间
![](http://pic002.cnblogs.com/images/2011/287970/2011111223134114.jpg)
可以看到,i=3时,MainThread挂起1ms,这1ms内NewThread占用CPU,j从1跑到了11。1ms后MainThread“醒了”,重新与NewThread竞争CPU的使用,结果夺回了CPU的使用权,i从4跑到了5。i=6时,又经历了上述过程。。。
想要更好的理解Sleep方法,请阅读http://www.cnblogs.com/ilove/archive/2008/04/07/1140419.html。
3. Join——暂停当前线程,直到调用Join方法的线程终止为止。
![](http://pic002.cnblogs.com/images/2011/287970/2011111223192730.jpg)
可以看到,i=5时,NewThread开始并调用Join方法暂停了MainThread,直到NewThread终止,MainThread才恢复执行。
4. 为线程传递参数
![](http://pic002.cnblogs.com/images/2011/287970/2011111223230896.jpg)
这里使用lambda表达式为NewThread传递参数,还有另外的方法@/article/4793748.html。
说明:以上部分实验不具有重复性,请读者不要纠结于:自己实验的结果与本文不同。
1. Start——启动线程。
using System; using System.Threading; class Example { public static void Loop() { for (int j = 1; j <= 20; j++) { Console.WriteLine(Thread.CurrentThread.Name + " j = " + j); } } public static void Main() { Thread.CurrentThread.Name = "MainThread"; Thread newThread = new Thread(new ThreadStart(Loop)); newThread.Name = "NewThread"; newThread.Start(); for (int i = 1; i <= 20; i++) { Console.WriteLine(Thread.CurrentThread.Name + " i = " + i); } Console.ReadLine(); } }
![](http://pic002.cnblogs.com/images/2011/287970/2011111223495722.jpg)
可以看到,NewThread启动后,与MainThread相互竞争使用CPU。这就是Windows系统的抢占式CPU竞争策略。
2. Sleep——将当前线程挂起指定的时间
using System; using System.Threading; class Example { public static void Loop() { for (int j = 1; j <= 20; j++) { Console.WriteLine(Thread.CurrentThread.Name + " j = " + j); } } public static void Main() { Thread.CurrentThread.Name = "MainThread"; Thread newThread = new Thread(new ThreadStart(Loop)); newThread.Name = "NewThread"; newThread.Start(); for (int i = 1; i <= 20; i++) { if (i % 3 == 0) Thread.Sleep(1); else Console.WriteLine(Thread.CurrentThread.Name + " i = " + i); } Console.ReadLine(); } }
![](http://pic002.cnblogs.com/images/2011/287970/2011111223134114.jpg)
可以看到,i=3时,MainThread挂起1ms,这1ms内NewThread占用CPU,j从1跑到了11。1ms后MainThread“醒了”,重新与NewThread竞争CPU的使用,结果夺回了CPU的使用权,i从4跑到了5。i=6时,又经历了上述过程。。。
想要更好的理解Sleep方法,请阅读http://www.cnblogs.com/ilove/archive/2008/04/07/1140419.html。
3. Join——暂停当前线程,直到调用Join方法的线程终止为止。
using System; using System.Threading; class Example { public static void Loop() { for (int j = 1; j <= 10; j++) { Console.WriteLine(Thread.CurrentThread.Name + " j = " + j); } } public static void Main() { Thread.CurrentThread.Name = "MainThread"; Thread newThread = new Thread(new ThreadStart(Loop)); newThread.Name = "NewThread"; for (int i = 1; i <= 10; i++) { if (i == 5) { newThread.Start(); newThread.Join(); } else { Console.WriteLine(Thread.CurrentThread.Name + " i = " + i); } } Console.ReadLine(); } }
![](http://pic002.cnblogs.com/images/2011/287970/2011111223192730.jpg)
可以看到,i=5时,NewThread开始并调用Join方法暂停了MainThread,直到NewThread终止,MainThread才恢复执行。
4. 为线程传递参数
using System; using System.Threading; class Example { public static void Say(string message) { Console.WriteLine("I'm " + Thread.CurrentThread.Name + "."); Console.WriteLine("I got a message: " + message); } public static void Main() { Thread.CurrentThread.Name = "MainThread"; Thread newThread = new Thread(new ThreadStart(() => Say("Hello!")));//为线程传递参数的最简单的方法莫过于执行一个lambda表达式 newThread.Name = "NewThread"; newThread.Start(); newThread.Join(); Console.ReadLine(); } }
![](http://pic002.cnblogs.com/images/2011/287970/2011111223230896.jpg)
这里使用lambda表达式为NewThread传递参数,还有另外的方法@/article/4793748.html。
说明:以上部分实验不具有重复性,请读者不要纠结于:自己实验的结果与本文不同。
相关文章推荐
- Thread.sleep 和Object.join的使用
- Thread->sleep、wait、join使用
- java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- 并发编程(5)Thread类的使用(sleep/yield/join)
- Java中run(), start(), join(), wait(), yield(), sleep()的使用
- Java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- [转贴]ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
- Handler 和 HandlerThread 的简单使用
- startUML2.8.0使用简单说明
- netty中使用Thread.sleep()方法的问题
- 线程本地存储(Thread Local Storage, TLS)简单分析与使用
- runnable与handler结合使用,其实跟在Thread中的run()中sleep的效果是一样的
- Xcode7.2NSThread、GCD多线程创建及简单使用
- Thread中的join使用
- [转贴]ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
- 多线程Thread的使用,并使用Thread传参
- Boost.asio的简单使用(timer,thread,io_service类)
- Thread.join()的使用
- 通过使用Thread.join()函数使异步线程变得同步
- ThreadFactory, ExecutorService的简单使用