问题描述
1.异步委托是使用线程池来使用的。2.线程池里的都是后台线程。3.Thread可以建立前台线程和后台线程。问题:是否和异步委托一样,Thread建立的后台线程是利用线程池来实现的吗?如何验证结论?
解决方案
解决方案二:
后台线程和线程池没有关系
解决方案三:
首先,创建和销毁线程是一个要耗费大量时间的过程,另外,太多的线程也会浪费内存资源,所以通过Thread类来创建过多的线程反而有损于性能,为了改善这样的问题,.net中就引入了线程池。线程池形象的表示就是存放应用程序中使用的线程的一个集合(就是放线程的地方,这样线程都放在一个地方就好管理了)。CLR初始化时,线程池中是没有线程的,在内部,线程池维护了一个操作请求队列,当应用程序想执行一个异步操作时,就调用一个方法,就将一个任务放到线程池的队列中,线程池中代码从队列中提取任务,将这个任务委派给一个线程池线程去执行,当线程池线程完成任务时,线程不会被销毁,而是返回到线程池中,等待响应另一个请求。由于线程不被销毁,这样就可以避免因为创建线程所产生的性能损失。注意:通过线程池创建的线程默认为后台线程,优先级默认为Normal.Thread创建的线程不在线程池里面。
解决方案四:
Thread创建的跟ThreadPool没有任何关系,不然也就不会有那么多文章在那里写不要随意使用Thread
解决方案五:
看看这个就都什么都懂了...
解决方案六:
引用楼主hellosxl的回复:
...如何验证结论?
可以用ThreadPool.GetAvailableThreads来得到当前线程池可用线程的数量。1、用ThreadPool.QueueUserWorkItem,运行长一点的工作,应该可以观察到可用线程池线程数量的减少。2、用thread.Start,应该可以观察到可用线程池线程数量不变。
解决方案七:
后台线程和线程池没有关系+1后台线程是由你开启和操作的,而线程池则是由于在使用线程的时候不规范会导致各种问题而衍生的一种管理线程的新方式..
解决方案八:
线程池和后台线程没关系
解决方案九:
请问这是什么意思,今天老师PPT上写的:当且仅当创建线程是后台线程时,新线程才是后台线程。
解决方案十:
引用8楼hanjunchen729的回复:
请问这是什么意思,今天老师PPT上写的:当且仅当创建线程是后台线程时,新线程才是后台线程。
老师的意思是说,如果你创建的Thread,没有明确说明是background,那就不是后台线程
解决方案十一:
线程和线程池没有关系C#还有Task任务可以看看
解决方案十二:
你这就好像要验证鸡生出来的是蛋不是鸭蛋一样可笑
解决方案十三:
引用9楼xian_wwq的回复:
Quote: 引用8楼hanjunchen729的回复:
请问这是什么意思,今天老师PPT上写的:当且仅当创建线程是后台线程时,新线程才是后台线程。老师的意思是说,如果你创建的Thread,没有明确说明是background,那就不是后台线程
好的谢谢
解决方案十四:
线程开启可以。尽量别关。宁可用挂起。做成几个进程拼凑的程序也可以。进程退出比较安全。线程不要轻易退出。退出也要用线程里的循环结束。叫他自动return。