ThreadPool 线程池 多线程 等待 回调函数 获取返回值
2017-01-13 17:21
615 查看
ThreadPool 出现于2.0时代
线程池:预先准备好线程,少了会补充,多了会销毁多余部分
价值:速度快
基本代码
包含最基本的使用
//多线程
Console.WriteLine("开始");
WaitCallback act = t =>
{
Thread.Sleep(1000);
Console.WriteLine("进入了方法,参数为{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
};
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(act, i);
}
Console.WriteLine("结束");
结果
升级版
包含多线程+等待+回调函数+获取返回值
public static Dictionary<int, ManualResetEvent> md = new Dictionary<int, ManualResetEvent>();
public static void Do2()
{
//多线程+等待+回调函数+获取返回值
Console.WriteLine("开始");
WaitCallback wat = t =>
{
string Rval = FirstFun(t);
CallBack();
Console.WriteLine("获取结果为{0}", Rval);
};
//循环实现多线程
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(wat, i);
md.Add(i, new ManualResetEvent(false));
}
for (int i = 0; i < md.Count; i++)
{
md[i].WaitOne();
}
Console.WriteLine("结束");
Console.Read();
}
//主方法
public static string FirstFun(object t)
{
Thread.Sleep(1000);
Console.WriteLine("进入方法了,参数{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
md[(int)t].Set();//标记该线程执行完成
return t.ToString();
}
//回调
public static void CallBack()
{
Thread.Sleep(1000);
Console.WriteLine("进入了回调函数,当前线程ID为{0}", Thread.CurrentThread.ManagedThreadId);
}
结果
线程池:预先准备好线程,少了会补充,多了会销毁多余部分
价值:速度快
基本代码
包含最基本的使用
//多线程
Console.WriteLine("开始");
WaitCallback act = t =>
{
Thread.Sleep(1000);
Console.WriteLine("进入了方法,参数为{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
};
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(act, i);
}
Console.WriteLine("结束");
结果
升级版
包含多线程+等待+回调函数+获取返回值
public static Dictionary<int, ManualResetEvent> md = new Dictionary<int, ManualResetEvent>();
public static void Do2()
{
//多线程+等待+回调函数+获取返回值
Console.WriteLine("开始");
WaitCallback wat = t =>
{
string Rval = FirstFun(t);
CallBack();
Console.WriteLine("获取结果为{0}", Rval);
};
//循环实现多线程
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(wat, i);
md.Add(i, new ManualResetEvent(false));
}
for (int i = 0; i < md.Count; i++)
{
md[i].WaitOne();
}
Console.WriteLine("结束");
Console.Read();
}
//主方法
public static string FirstFun(object t)
{
Thread.Sleep(1000);
Console.WriteLine("进入方法了,参数{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
md[(int)t].Set();//标记该线程执行完成
return t.ToString();
}
//回调
public static void CallBack()
{
Thread.Sleep(1000);
Console.WriteLine("进入了回调函数,当前线程ID为{0}", Thread.CurrentThread.ManagedThreadId);
}
结果
相关文章推荐
- Thread 多线程 等待 回调函数 获取返回值
- 异步委托 多线程 多线程等待 多线程获取返回值
- Java线程池,获取返回值
- VB.NET多线程编程参数的传递以及返回值的获取
- 多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果
- C#多线程学习 之 线程池[ThreadPool](转)
- C#多线程学习 之 线程池[ThreadPool]
- C#多线程学习 之 线程池[ThreadPool]
- Java多线程-线程池ThreadPoolExecutor的submit返回值Future
- C#多线程学习 之 线程池[ThreadPool]
- [转]C#多线程学习 之 线程池[ThreadPool]
- java&android线程池-Executor框架之ThreadPoolExcutor&ScheduledThreadPoolExecutor浅析(多线程编程之三)
- ThreadPool,线程池等待多个子线程完成.
- Task 创建 传参 等待 回调 获取返回值
- Java多线程之线程池submit任务及get返回值流程详解
- 网络编程(35)—— 利用pthread_join函数等待线程结束并获取线程函数返回值
- java多线程之从任务中获取返回值
- java多线程编程获取线程返回值:ExecutorCompletionService
- 多线程获取线程返回值---Future And CompletionService
- 多线程的3中实现方式,以及有返回值线程池Demo