大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
ThreadPool 类 提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。
许 多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应 用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一 个辅助线程就会执行对应的回调函数。
注意
托管线程池中的线程为后台线程,即它们的 IsBackground 属性为 true。这意味着在所有的前台线程都已退出后,ThreadPool 线程不会让应用程序保持运行。
也可以将与等待操作不相关的工作项排列到线程池。若要请求由线程池中的一个线程来处理工作项,请调用 QueueUserWorkItem 方法。此方法将对将被从线程池中选定的线程调用的方法或委托的引用用作参数。一个工作项排入队列后就无法再取消它。
计时器队列中的计时器以及已注册的等待操作也使用线程池。它们的回调函数也会排列到线程池。
每个进程都有一个线程池。线程池的默认大小为每个可用处理器有 25 个线程。使用 SetMaxThreads 方法可以更改线程池中的线程数。每个线程使用默认的堆栈大小并按照默认的优先级运行。
WaitCallback 委托 表示线程池线程要执行的回调方法。
WaitCallback 表示要在 ThreadPool 线程上执行的回调方法。创建委托,方法是将回调方法传递给 WaitCallback 构造函数。您的方法必须具有此处所显示的签名。
通过将 WaitCallback 委托传递给 ThreadPool.QueueUserWorkItem 来将任务排入队列以便执行。您的回调方法将在某个线程池线程可用时执行。
注意
Visual Basic 用户可以省略 WaitCallback 构造函数,在向 QueueUserWorkItem 传递回调方法时只需使用 AddressOf 运算符即可。Visual Basic 将自动调用正确的委托构造函数。
如果要将信息传递给回调方法,请创建包含所需信息的对象,并在将任务排入队列以便执行时将它传递给 QueueUserWorkItem。每次执行您的回调方法时,state 参数都包含此对象。
有关如何使用回调同步线程池线程的更多信息,请参见 托管线程池。
代码:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace Thd
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Console.WriteLine(“Main thread: Queuing an asynchronous operation.”);
AutoResetEvent asyncOpIsDone = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(MyAsyncOperation), asyncOpIsDone);
Console.WriteLine(“Main thread: Performing other operations.”);
//
Console.WriteLine(“Main thread: Waiting for asynchronous operation to complete.”);
asyncOpIsDone.WaitOne();
}
// The callback method’s signature MUST match that of a System.Threading.WaitCallback
// delegate (it takes an Object parameter and returns void)
static void MyAsyncOperation(Object state)
{
Console.WriteLine(“WorkItem thread: Performing asynchronous operation.”);
//
Thread.Sleep(5000); // Sleep for 5 seconds to simulate doing work
// Signal that the async operation is now complete.
// 同步操作已经完成的操作
((AutoResetEvent)state).Set();
}
}
}
调用((AutoResetEvent)state).Set();后,主线程中的asyncOpIsDone.WaitOne();就结束了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189985.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...