140.如何在程序中控制.NET的线程池
多线程编程往往与基于用户界面的应用联系在一起,它们需要在不影响终端用户的情况下,执行一些耗时的操作。在.NET环境中,线程池的控制是通过ThreadPoolCallback()方法将传递给QueueUserWorkItem,并在线程池中分配一个可用线程来执行此方法。
141.C#中如何控制多线程编程
在.NET中,控制多线程编程非常容易,利用.NET中Thread类封装好的方法和属性可以很方便地创建自己的多线程实例,具体方法请参考本小节的内容。
142.如何定义线程优先级
每个线程都有一个分配的优先级。对于在公共语言运行时内创建的线程,默认的优先级为Normal,而在运行库外创建的线程在进入运行库时,将保留其先前的优先级。可以通过访问Thread对象的Priority属性来获取和设置其优先级。
143.请解释Thread类中的Join()方法
Thread类的Join()方法的作用将两个交替执行的线程合并为顺序执行的线程。并如在线程S中调用了线程M的Join()方法,线程M将插入线程S之前,直到线程M执行完毕后,才会继续执行线程S。
144.请介绍C#中System.Threading.Timer
System.Threading.Timer是一个使用回调方法的计时器,它的操作简单高效。在应用程序中,特别是很容易出错的多线程程序,充分利用这些系统提供的功能,可以节省很多时间和精力。
145.如何检索线程池最大线程数与可用线程数
线程池可以看作一个大容器,而这个容器的容量是有限的,它只能够保证线程池中的线程数量维持在某一个数量区间中。程序员可以利用ThreadPool类中的GetAvailableThreads()方法与GetAvailableThreads()方法计算出当前线程中最大线程数与可用线程数。
146.多线程编程中如何控制好多个线程相互之间的联系
在C#中,使用Mutex对象可以保护共享资源不被多个线程或进程同时访问,即互斥操作。例如,为了防止两个线程同时写入共享内存,每个线程在执行访问该共享内存的代码之前等待Mutex对象的所属权。当写入共享内存后,线程将释放该Mutex对象。
147.怎样创建线程独享的全局数据
线程池存储(TLS)是一个方法,通过该方法,给定的多线程进程中的每个线程都可以分配存储线程特定数据的位置。线程本地存储是一种提供了线程独享的全局数据功能的机制。.NET提供了ThreadStatic的特性来声明线程独享的数据。