Thread建立的后台线程是利用线程池来实现的吗?

问题描述

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。

时间: 2025-01-24 01:53:45

Thread建立的后台线程是利用线程池来实现的吗?的相关文章

急问 如何不利用线程保持画面刷新?

问题描述 现在制作的程序,画面按钮Click后,为了给客户一个运行中的提示,我们把一个原来静止的图片换成了一个动态的GIF文件.但当线程在后台执行较大型的SQL的时候,画面进入假死状态,GIF文件就没办法保持动态了.有没有办法在不利用线程的情况下保持画面的动态效果?(因为框架比较死,不方便改成多线程的)小弟想过使用Timer的方法,但似乎不行.大家帮帮忙吧,急救啊急救! 解决方案 解决方案二:大家帮帮忙的,真的是急用的啊解决方案三:除非你改进大型SQL查询,采用异步查询;否则建议还是多线程,画面

利用线程实现动态显示系统时间_java

编写Applet小程序,通过在HTML文档中接收参数, 用不同颜色.字体显示当前的系统时间. import java.awt.*; import java.applet.Applet; import java.util.*; import java.awt.Graphics; public class clock extends Applet implements Runnable //继承Applet类并实现Runnable接口 { Thread clockThread=null; //创建一

线程通信--利用事件对象

在线程之间传送信号可以使用事件对象,用MFC的CEvent来表示.一个事件对象有两种状态:信号态与非信号态.线程能监视于信号态的事件,以便在适当的时间完成对事件的操作. 创建事件的语句如下: CEvent ThreadBegin; 事件被创建后就自动处于非信号态,要使用它处于信息态,必须使用对件对象的成员函数SetEvent(),即: ThreadBegin.SetEvent(); 线程监视这个信号来知道事件已准备就绪,从而可以进行其它的操作.而线程通过调用API函数WaitForSingleO

new Thread的弊端及Java四种线程池的使用

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次ne

利用线程来处理跳转,请大家帮忙解答,因为是初学者,比较弱

问题描述 利用线程来处理跳转,请大家帮忙解答,因为是初学者,比较弱 怎样用实现,当出现欢迎页面(一张图片),会通过线程设置一定时间跳转到主页面? 解决方案 在展示图片的页面 初始化的时候,使用JS 定时器 功能不行吗??

c#-C#中利用线程触发button事件后,是否可在button 中Abort线程?

问题描述 C#中利用线程触发button事件后,是否可在button 中Abort线程? C#中利用线程触发button事件后,是否可在button 中Abort线程? 解决方案 可以是可以,但是这样做容易造成意想不到的情况,比如资源泄露或者文件写入错误或者崩溃. 最好让线程自己退出. 解决方案二: btn 中应该定义的是执行的方法,你用线程 执行方法就行了,干嘛 非得通过 btn事件来执行方法? 解决方案三: 一般不会这样去结束一个线程,通常的做法是线程里面加一个循环,循环条件设置为Flag,

windows下利用线程池完成多任务的分配和运行

在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,msdn上也给出了对应的例子:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686980(v=vs.85).aspx 感兴趣的话大家可以去看看,这里我给出一个简单的demo,利用线程池单次调用多次调用,例子如下:   [cpp] view plain cop

免杀新姿势:利用线程将恶意代码注入到内存中

本文讲的是免杀新姿势:利用线程将恶意代码注入到内存中, 产生存放远程攻击线程的进程 在这篇文章中我不想一步一步解释我编写的C#代码,但是我会展示下它能够绕过杀毒软件,并且操作非常简单,而且实用. 首先说明一下: 1. 我是在三年前发现这个攻击方法的,当我在做免杀的时候我发现了很多都是以0x0地址开始的进程.在我的win7系统中这种恶意代码绕过了我的杀毒软件,只是在内存中可以找到,然后以系统权限运行.所以,当然是NSA干的咯! 2. 这并不意味着以0x0开始的进程都是进行恶意注入的. 就像刚才所说

Java线程之守护线程(Daemon)用法实例_java

本文实例讲述了Java线程之守护线程(Daemon)用法.分享给大家供大家参考.具体如下: 守护线程(Daemon) Java有两种Thread:"守护线程Daemon"与"用户线程User". 我们之前看到的例子都是用户,守护线程是一种"在后台提供通用性支持"的线程,它并不属于程序本体. 从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的.事实并不是这样,任何线程都可以是&qu