C# 多线程之通过Timer开启线程的例子
本例通过Timer的tick()方法触发TimerCallback委托来开辟新的线程,线程中的具体工作通过一个静态方法作为参数给TimerCallback委托。
using System;
using System.Threading; /* 这是一个关于 timer开启多线程的一个例子
* 1.Timer 的tick事件触发系统内置委托TimerCallback委托。而此委托会触发一个新的线程 。此线程中需要完成的具体的工作写成一个静态方法。作为参数传递给这个委托。
* 2.如果是用Timer触发的线程会自动开始不需要用到.Start()来启动
* 3.如果没有使用线程池threadpool 那么有多少个线程系统都会全部执行 这样的话如果线程太多那就使系统不停地在线程间切换会消耗大量时间。所以说线程太多时一定要
* 用一个线程池来管理 这样就可以提高效率
* 4.虽然timer是在主线程中创建并开始运行的, 但是主线程暂停却并不影响timer的tick事件的按时触发,比如本例中主线程设置睡眠5秒,但是并没有影响timer.tick事件触发
* 5.所有timer创建的线程都是后台线程 即 线程的.isbackground=true;
* 6.用户不创建线程池 系统是不会自己创建的。
* 7.Timer.Change(Timeout.Infinite,Timeout.Infinite) 则是取消Timer的重复性劳动等待下次启用。
* 参数1:Timer每一次触发执行回调前需等待时间,0立即触发,Timeout.Infinite永不触发回调;
* 参数2:表示每次触发timer的间隔时间,0表示只执行一次即第一次。
*/ namespace TimerCreateThread
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程开始执行********************* 线程ID" + Thread.CurrentThread.ManagedThreadId);
TimerCallback delegate_tcb = new TimerCallback(ToDoSamething);//实例化一个可以创建新线程的内置委托--TimerCallback 。具体做的事写成一个静态方法作为参数传入委托。
Timer timer = new Timer(delegate_tcb, null, ,); //把这个委托作为参数传递进去,timer开启后tick延迟3秒, 之后每2秒执行一次tick()事件,而此事件就会触发TimerCallback委托。一下就要新建一个线程 int j = ;
while (j <)
{
Console.WriteLine("主线程正在执行********************* 线程ID" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(); //主线程休眠不会影响tick执行 因为我设置的tick时间为2秒 ,而主线程要睡4秒 //证明 虽然timer是在主线程中进行的 但是 主线程暂停却并不影响timer的tick事件的按时触发
j++;
}
timer.Change(Timeout.Infinite, Timeout.Infinite);//完成上面的while循环后执行此句时钟停止。Timer就不再通过tick激发委托创建新线程 时间为4000*3=12秒。此时就不会触发新的线程 但已经触发的线程不会结束 。不管是否正在执行还是正在等待
//timer.Dispose();//不建议使用销毁。因为一旦销毁就不能再重启时间触发器
Console.WriteLine("线程池已满,不再开辟新的线程");
Console.ReadKey();
} //具体工作内容写入这个静态方法
static void ToDoSamething(object i)
{
Thread.CurrentThread.IsBackground = false;
Console.WriteLine("此线程正在执行,线程ID" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();//模拟线程执行 需要10秒时间 。Timeout.Infinite无限长
Console.WriteLine("执行完成,线程ID" + Thread.CurrentThread.ManagedThreadId); }
}
}
C# 多线程之通过Timer开启线程的例子的更多相关文章
- Day10 多线程理论 开启线程
多线程: 多线程和多进程的不同是他们占用的资源不一样, 一个进程里边可以包含一个或多个进程, 进程的开销大,线程的开销小. 打个比方来说:创建一个进程,就是创建一个车间.创建一个线程,就是在一个车间创 ...
- [并发编程 - 多线程:信号量、死锁与递归锁、时间Event、定时器Timer、线程队列、GIL锁]
[并发编程 - 多线程:信号量.死锁与递归锁.时间Event.定时器Timer.线程队列.GIL锁] 信号量 信号量Semaphore:管理一个内置的计数器 每当调用acquire()时内置计数器-1 ...
- python 并发编程 多线程 开启线程的两种方式
一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- Java多线程开发系列之三:线程这一辈子(线程的生命周期)
前文中已经提到了,关于多线程的基础知识和多线程的创建.但是如果想要很好的管理多线程,一定要对线程的生命周期有一个整体概念.本节即对线程的一生进行介绍,让大家对线程的各个时段的状态有一定了解. 线程的一 ...
- Java 基础 多线程进阶(锁,线程安全)
一,前言 前面我们已经对线程和线程池有一定的了解,但是只要说到多线程,肯定需要考虑线程安全等问题.接下来我们就来好好聊聊这些问题. 二,线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段 ...
- Java多线程01(Thread类、线程创建、线程池)
Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...
- C# 多线程九之Timer类
1.简介 相信写过定时任务的小伙伴都知道这个类,非常的轻量级,而且FCL中大量的类使用了这个方法,比如CancellationTokenSource的CancelAfter就是用Timer去做的. 当 ...
- Java多线程学习(八)线程池与Executor 框架
目录 历史优质文章推荐: 目录: 一 使用线程池的好处 二 Executor 框架 2.1 简介 2.2 Executor 框架结构(主要由三大部分组成) 2.3 Executor 框架的使用示意图 ...
随机推荐
- Elastcisearch.Nest 7.x 系列`伪`官方翻译:通过 NEST 来快捷试用 Elasticsearch
本系列已经已经全部完成,完整版可见:https://blog.zhuliang.ltd/categories/Elasticsearch/ 本系列博文是"伪"官方文档翻译(更加本土 ...
- JZOJ4238 纪念碑
Description 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一个长为n,宽为m的矩形.它由n* m个1*1的 ...
- DFS(深度优先搜索遍历有向图)-03-有向图-太平洋大西洋水流问题
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度.“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界. 规定水流只能按照上.下.左.右四个方向流动,且只能从高 ...
- rtmp协议规范
译序: 本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文包含 RTMP 规范的全部内容.是第一个比较全面的 RTMP 规范的中译本.由于成文时间仓促,加上作者知识面所限,翻译错误 ...
- EL表达式(Exprission language)
EL介绍 Expressive Language, JSP2.0引入,简化jsp开发中对对象的引用,(可以直接读取对象的属性,不需要像之前java脚本那样去做,比较繁琐),使得访问存储在JavaBea ...
- 读《Clean Code 代码整洁之道》之感悟
盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊.我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句 ...
- [白话解析] 带你一起梳理Word2vec相关概念
[白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0 ...
- c++中多文件的组织
参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第八章 根据书中例子学习使用类的多文件项目. 首先要将类CBox定义成一个连贯的整体,在CBox.H文件中写入相关的类定义, ...
- Centos 7x 安装 Telegram MTproxy代理【完美可用】
0x00 最近迷上了Telegram,也就是电报,觉得通过这个获取国外的新闻比较方便 可是我的VPS小机子不给力,一开始使用的Centos 6x,死活装不上去, 发现MTproxy不支持Centos ...
- Dubbox 环境搭建
第一章:Dubbox简介 Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的 ...