跨线程访问 & 线程池
来源:互联网 发布:hadoop推荐算法 编辑:程序博客网 时间:2024/06/07 10:09
1、跨线程访问
2、线程同步
Lock(语法糖)
Monitor.Enter(Obj)
Monitor.Exit(Obj)
3、线程池
线程池原理
线程切换消耗资源,cpu在切换线程的时候,需要把当前线程执行的状态保持到寄存器里面去。
线程创建非常消耗资源。线程创建非常慢,占用大量的内存空间。每个线程最少1M内存开销。
线程池:提高了线程的利用率,非常适合工作任务非常小,而且又需要使用单独的线程来解决的问题。
什么时候用线程池?什么时候用手动创建线程?
1、能用线程池的就用线程池
2、我们想手动关闭线程的话那么必须手动创建了。 Abort() Join()
3、我们需要对线程池的线程的优先级做设置的情景下,只能使用手动创建线程。
4、如果执行的线程执行时间特别长。建议手动创建线程。
public void MoveFor() { int a = 0; for (int i = 0; i < 999999999; i++) { a = i; } // MessageBox.Show(a.ToString()); if (this.txtNum.InvokeRequired)//如果为true,表示跨线程访问 { //Invoke:会沿着TextBox标签去找 Form窗体 找到创建Form窗体的那个线程 执行下面的方法.谁创建了label的线程,就用该线程调用该委托 this.txtNum.Invoke(new Action<string, TextBox>(SetValue), a.ToString(), this.txtNum); } else { this.txtNum.Text = a.ToString(); } } public void SetValue(string num, TextBox txt) { txt.Text = num; }
2、线程同步
Lock(语法糖)
Monitor.Enter(Obj)
Monitor.Exit(Obj)
3、线程池
线程池原理
Stopwatch sw =new Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { new Thread(() => { int i2 = 1 + 1; }).Start(); } sw.Stop(); Console.WriteLine(sw.Elapsed.TotalMilliseconds); sw.Reset(); sw.Restart(); for (int i = 0; i < 1000; i++) { ThreadPool.QueueUserWorkItem(new WaitCallback(PoolCallBack), "sssss"+i); } sw.Stop(); Console.WriteLine(sw.Elapsed.TotalMilliseconds); private static void PoolCallBack(object state) { int i = 1 +1; }
线程切换消耗资源,cpu在切换线程的时候,需要把当前线程执行的状态保持到寄存器里面去。
线程创建非常消耗资源。线程创建非常慢,占用大量的内存空间。每个线程最少1M内存开销。
线程池:提高了线程的利用率,非常适合工作任务非常小,而且又需要使用单独的线程来解决的问题。
什么时候用线程池?什么时候用手动创建线程?
1、能用线程池的就用线程池
2、我们想手动关闭线程的话那么必须手动创建了。 Abort() Join()
3、我们需要对线程池的线程的优先级做设置的情景下,只能使用手动创建线程。
4、如果执行的线程执行时间特别长。建议手动创建线程。
0 0
- 跨线程访问 & 线程池
- 跨线程访问控件
- Silverlight 跨线程访问
- C#跨线程访问
- 跨线程访问控件
- 跨线程访问UI
- C#线程用法及跨线程访问
- 线程间的通信 跨线程访问
- 跨线程访问窗体控件
- 跨线程的控件访问
- 如何跨线程访问控件
- 如何跨线程访问控件
- .NET跨线程访问控件
- 跨线程访问webBrowser控件
- C# 跨线程访问控件
- 跨线程访问window控件
- Silverlight 跨线程访问无效
- c#跨线程访问控件
- C++作业4
- Android进阶之路
- 系统的简单注解
- 安装ubuntu server的注意事项
- Java注解(Annotation)详解
- 跨线程访问 & 线程池
- 奇怪的order by
- 实验-4
- C++作业4
- centos7 修改yum源为阿里源
- 【京东】C++研发工程师实习生面试
- Begining
- YARN Restapi : List running mapreduce apps which start before specified time
- MyEclipse中开发网站项目如何设置关联的Tomcat服务器热启动,即修改项目源代码时不需要每次都重启Tomcat