说说C#多线程那些事-线程基础
作者:网络转载 发布时间:[ 2016/4/29 13:35:02 ] 推荐标签:测试开发技术 编程语言
运行结果:
但是为什么开始输出Thread1 sleep?有时候也会在中间随机输出呢?
其实,线程池的启动和终止不是我们程序所能控制的,线程池中的线程执行完之后是没有返回值的,我们可以用ManualResetEvent通知一个或多个正在等待的线程已发生事件
修改后的代码:
using System;
using System.Threading;
namespace Threading
{
class Program
{
//新建ManualResetEvent对象并且初始化为无信号状态
private static ManualResetEvent mre = new ManualResetEvent(false);
public static void Thread1(object data)
{
Console.WriteLine("Thread1 => {0}",data.ToString());
if (Convert.ToInt32(data) == 9)
{
mre.Set();
}
}
static void Main(string[] args)
{
//控制线程数大小
//第一个参数是:线程池中辅助线程的大数目
//第二个参数是:线程池中异步 I/O 线程的大数目
ThreadPool.SetMaxThreads(3, 3);
for (int i = 0; i < 10; i++)
{
//ThreadPool是静态类无需实例化,
//ThreadPool.QueueUserWorkItem(new WaitCallback(Thread1), i);
ThreadPool.QueueUserWorkItem(Thread1, i);
}
//阻止当前线程,直到当前 WaitHandle 收到信号为止。
mre.WaitOne(Timeout.Infinite, true);
Console.WriteLine("Thread1 sleep");
Thread.Sleep(100000);
Console.WriteLine("Thread1 end");
Console.ReadKey();
}
}
}
输入结果:
ok,搞定。
参考资料:
ThreadPool:https://msdn.microsoft.com/zh-cn/library/system.threading.threadpool.aspx#Y0
ManualResetEvent:https://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent.aspx
五、总结
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,终可能造成很多Bug;
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11