Thread调用含参方法,参数必须是object类。ThreadPool调用的方法,无论是否含参,方法必须有object类参数(可不用,但得有)

【线程】

using System;
using System.Threading; namespace ConsoleApplication3
{
class Program
{
void DownloadFile(object filename)//线程调用含参方法时,所含参数必须为object类型
{
Console.WriteLine("开始下载:" + Thread.CurrentThread.ManagedThreadId + filename);
Thread.Sleep();
Console.WriteLine("下载完成");
}
static void Main(string[] args)
{
Program p = new Program();//类的对象,方便引用非静态成员
Thread t = new Thread(p.DownloadFile);
t.Start("xxx.bt");//给含参方法赋值
}
}
}

【线程池】

using System;
using System.Threading; namespace ConsoleApplication3
{
class Program
{
void DownloadFile(object filename)//线程池调用的方法,必须含object类型参数,即使不使用
{
Console.WriteLine("开始下载:" + Thread.CurrentThread.ManagedThreadId + filename);
Thread.Sleep();
Console.WriteLine("下载完成");
}
static void Main(string[] args)
{
Program p = new Program();
ThreadPool.QueueUserWorkItem(p.DownloadFile, "xxx.bt");
ThreadPool.QueueUserWorkItem(p.DownloadFile);//如不用参数,此处省略。方法中不能省略
ThreadPool.QueueUserWorkItem(p.DownloadFile, "xxx.bt");
Console.ReadKey();
}
}
}

Thread创建的线程,默认是前台线程。线程池默认是后台线程。

一个进程可以有多个线程。所有的前台线程运行结束,进程才结束(如Main方法结束,但进程仍然运行)。进程结束,后台线程会被强行终止。

Thread类设置IsBackground属性,设定前台线程、后台线程(t.IsBackground=true)。

入池的线程,不可更改为前台线程,不能设置优先级、名称,只能用于时间较短的小任务。如需一直运行,应使用Thread类创建线程。

线程Thread、线程池ThreadPool的更多相关文章

  1. 多线程Thread,线程池ThreadPool

    首先我们先增加一个公用方法DoSomethingLong(string name),这个方法下面的举例中都有可能用到 #region Private Method /// <summary> ...

  2. [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  3. C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  4. 线程池ThreadPool的初探

    一.线程池的适用范围 在日常使用多线程开发的时候,一般都构造一个Thread示例,然后调用Start使之执行.如果一个线程它大部分时间花费在等待某个事件响应的发生然后才予以响应:或者如果在一定期间内重 ...

  5. C#多线程学习 之 线程池[ThreadPool](转)

    在多线程的程序中,经常会出现两种情况: 一种情况:   应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应                   这一般使用ThreadPo ...

  6. 多线程系列 线程池ThreadPool

    上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情.可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止 ...

  7. 面向对象的线程池Threadpool的封装

    线程池是一种多线程处理形式,预先创建好一定数量的线程,将其保存于一个容器中(如vector), 处理过程中将任务添加到队列,然后从容器中取出线程后自动启动这些任务,具体实现如下. 以下是UML图,展示 ...

  8. C# -- 使用线程池 ThreadPool 执行多线程任务

    C# -- 使用线程池 ThreadPool 执行多线程任务 1. 使用线程池 class Program { static void Main(string[] args) { WaitCallba ...

  9. python3 线程池-threadpool模块与concurrent.futures模块

    多种方法实现 python 线程池 一. 既然多线程可以缩短程序运行时间,那么,是不是线程数量越多越好呢? 显然,并不是,每一个线程的从生成到消亡也是需要时间和资源的,太多的线程会占用过多的系统资源( ...

随机推荐

  1. Centos磁盘空间不足,找不到占用文件

    服务器报警,系统"/"空间不足,但找不到哪些文件占用. 1.使用du -sh *,层层目录查看依然找不到 2.使用"lsof / | grep -i delete&quo ...

  2. c++ string详解 assign

    assign方法可以理解为先将原字符串清空,然后赋予新的值作替换. 返回类型为 string类型的引用.其常用的重载也有下列几种: a. string& assign ( const stri ...

  3. java中利用hanlp比较两个文本相似度的步骤

    使用 HanLP - 汉语言处理包 来处理,他能处理很多事情,如分词.调用分词器.命名实体识别.人名识别.地名识别.词性识别.篇章理解.关键词提取.简繁拼音转换.拼音转换.根据输入智能推荐.自定义分词 ...

  4. redis存储数据

    redis存储结构--5种 RedisTemplate访问Redis数据结构(一)--String https://blog.csdn.net/qq_25135655/article/details/ ...

  5. golang substring

    在java下习惯了String.subString(start,end) 然后再golang继续敲substring木有了,看了下代码,也是原生支持的 但是百度发现有些人竟然把字符串转成字符数组再根据 ...

  6. asp.net core在发布时排除配置文件

    使用命令发布 dotnet restore dotnet publish -c Release -r win-x64 -o "D:\services" 这样发布总是是将配置文件覆盖 ...

  7. JS基础_数据类型-Boolean类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. [转载]HTTP和HTTPS

    来源:https://blog.csdn.net/xiaoming100001/article/details/81109617 大纲 一.前言: 先来观察这两张图,第一张访问域名http://www ...

  9. 第十七篇 JS验证form表单

    JS验证form表单   这节课做一个实际的,项目里会遇到的东西,例如登录页面,我们输入‘用户名’和‘密码’或者‘手机号’还有‘验证码’等等,它都会做一个前端验证,比如验证码,是6位有效数字组成,那么 ...

  10. Vi编辑器中查找替换

    1 第一个是替换当前行的yesterday为all 第二个是替换全局的 yesterday 为all :s/yesterday/all :s/yesterday/all/g