C#多线程(入门篇)

昨天一同学问我相关多线程的东西,真是菜鸡互啄呀!我想想还是自己整理整理吧,也是复习下。菜鸟勿喷!

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading;
  6 using System.Runtime.Remoting.Messaging;
  7
  8 namespace ThreadTest
  9 {
 10     public delegate void DelegateHandler(string a, string b);
 11     public class Program
 12     {
 13         static void Main(string[] args)
 14         {
 15             //创建线程原始写法,每次启用新的线程都要实例化一个Thread对象
 16             Thread threadA = new Thread(new ThreadStart(PrintA));
 17             threadA.Start();
 18
 19             //创建一个线程,没区别,c#的语法糖写法(本人一直用的这个)
 20             Thread threadB = new Thread(PrintB);
 21             threadB.Start();
 22
 23             //最简化写法
 24             new Thread(PrintC).Start();
 25
 26             /*
 27              * Task在.net 4.0后代替了ThreadPool(线程池)
 28              * 程序员嫌每次启动一个线程麻烦,则先new多个线程放到线程池里,
 29              * 可以理解为放到一个List里(泛型:List<Thread>),调用函数的时候则从List中取出一个空闲的线程
 30              * 执行完毕再放回去。
 31             */
 32             System.Threading.Tasks.Task.Factory.StartNew(PrintD);
 33
 34             //带一个参数,函数参数一定要是object对象
 35             Thread threadN = new Thread(PrintN);
 36             threadN.Start("N");
 37
 38             //带一个参数,函数参数一定要是object对象
 39             Thread threadM = new Thread(new ParameterizedThreadStart(PrintN));
 40             threadM.Start("M");
 41
 42             /*
 43              *带多个参数
 44              *方法1:参数放数组里传递
 45              *方法2:新建个无参方法,来调用多参数函数,参数在无参方法里传值(个人认为最笨方法)
 46              *方法3:新建个类,把被调用的函数和多个参数写在这个类里,主程序调用(与方法2如出一辙)
 47              *方法4:委托
 48              *网上还有好多其他方法,这里用委托来实现下
 49             */
 50             DelegateHandler dh = new DelegateHandler(PrintQ);
 51             dh("P", "Q");
 52
 53             for (int i = 0; i < 1000; i++)
 54             {
 55                 Console.Write("X");
 56             }
 57             Console.ReadKey();
 58         }
 59         #region Print
 60         static void PrintA()
 61         {
 62             for (int i = 0; i < 1000; i++)
 63             {
 64                 Console.Write("A");
 65             }
 66         }
 67
 68         static void PrintB()
 69         {
 70             for (int i = 0; i < 1000; i++)
 71             {
 72                 Console.Write("B");
 73             }
 74         }
 75
 76         static void PrintC()
 77         {
 78             for (int i = 0; i < 1000; i++)
 79             {
 80                 Console.Write("C");
 81             }
 82         }
 83
 84         static void PrintD()
 85         {
 86             for (int i = 0; i < 1000; i++)
 87             {
 88                 Console.Write("D");
 89             }
 90         }
 91
 92         static void PrintN(object obj)
 93         {
 94             for (int i = 0; i < 1000; i++)
 95             {
 96                 Console.Write(obj.ToString());
 97             }
 98         }
 99
100         static void PrintQ(string a, string b)
101         {
102             for (int i = 0; i < 1000; i++)
103             {
104                 Console.Write(a + b);
105             }
106         }
107         #endregion
108     }
109 }

更多代码,更新ing...

时间: 2024-10-11 16:16:30

C#多线程(入门篇)的相关文章

.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新手朋友),但是转念一想不如来点猛的(考虑到急性子的朋友),让你通过本文的学习就能快速的入门ASP.NET Core.既然是快速入门所以过多过深的内容我这里就一笔带过了!然后在后面的一些列文章中再慢慢的对其中的概念进行阐述. 本文已收录至.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规

让你久等了!《开源安全运维平台OSSIM疑难解析--入门篇》9月上市

2019年暑期,众所期待的新书<开源安全运维平台OSSIM疑难解析:入门篇>开始印刷,9月份即可预售.此书从立意到付梓,历时超过两年,经过数十次大修,历经曲折与艰辛,希望为大家代奉献一本好书,愿这本书能陪伴OSSIM用户一起进步一起成长. 一.写作目的 目前,OSSIM在中国移动.中国电信.中国石油.华为等大型企业内得到应用推广,这些企业在安全运营中心(SOC)基础上组建了OSSIM运维和二次开发团队,但图书市场缺乏专门讲解OSSIM运维和开发的书籍.为了解答OSSIM运维工程师在工作中遇到的

Java工程师学习指南(入门篇)

Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线. 所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程.今天我们要讲的是,

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. ----------------------

漫游Kafka入门篇之简单介绍

原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

软件测试系列之入门篇

一.你知道软件测试有多重要吗? 在国际上,软件测试(软件质量控制)是一件非常重要的工程工作,测试也作为一个非常独立的职业.在IBM.Microsoft等开发大型系统软件公司,很多重要项目的开发测试人员的比例能够达到1:2甚至1:4. 在国内软件测试的地位还不够高,并且大多只停留在软件单元测试.集成测试和功能测试上.软件测试从业人员的数量同实际需求有不小差距,国内软件企业中开发人员与测试人员数量一般为5:1,因此,国内的软件测试产业化还有待开发和深掘. 说到这里不知道你反应是高兴还是失望?但是我却