C# 支持多线程
C# 支持多线程并行执行程序 .一个程序由一个单线程开始,该单线程由CLR和操作系统创建而成,并具有多线程创建额外线程的功能.
.创建线程的方法
2.1 通过Thread类来创建线程. ThreadStart委托创建线程
ThreadStart ts=new ThreadStart(Run);//创建指定线程从哪里(哪个方法)开始的委托
Thread th=new Thread(ts);//传入指定的委托,创建线程实例
th.Start();//开始线程
2.2 通过C#语法糖来创建线程,直接给Thread类传递方法,这个方法只要符合ThreadStart委托所定义的方法格式,这个方法自动被编译器编译成ThreadStart委托.
Thread th=new Thread(Run);
th.Start();
2.3 通过匿名委托的方式创建线程.
Thread t = new Thread (delegate() { Console.WriteLine ("Hello!"); });
t.Start(); .创建线程前需要注意
3.1 在调用Start()之后,直到线程结束之前,线程的一个IsAlive属性一直未true,
3.2 一个线程一旦结束,便不能重新开始.
.使用排他锁(locker)解决线程安全问题
在多线程编程中,会有多个线程并发调用同一个代码块A的情况,用来提升代码的执行效率.
同一时间段,只有一个线程执行代码块B,lock能确保代码块B完成运行的同时,不被其他线程所干扰或中断.lock把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入,其他线程必须等待.
static void Go()
{
lock (locker)
{
if (!done) { Console.Write("done"); done = true; }
}}
4.1 当lock内语句为值类型而不是引用类型时,则会报编译错误,
4.2 常用的引用类型有: 类, 接口, 委托, 字符串, object, 数组,使用lock同步时,要保证lock是同一对象,方法是new 一个Object,并且永不修改他。
static Object locker = new Object();
static void Write() {
while (true)
{
lock (locker)
{
donationNums += ;
Console.WriteLine("当前有人正在捐款......请稍等");
Thread.Sleep();
Console.WriteLine("到目前为止,共募捐{0}元", donationNums);
}
} }
.使用Join方法,阻塞调用线程,直到子程序终止或者到一定时间为止,
主线程执行子线程数组,子线程数组在Join()方法的影响下,子线程数组中的线程不会并发全部执行,而是一个个依次执行,
.通过ParameterizedThreadStart委托给线程调用的方法传递参数来区分线程
6.1 ThreadStart只能接收无参数返回值的方法,
ParameterizedThreadStart pt = new ParameterizedThreadStart(Run);
//ParameterizedThreadStart接收一个方法(该方法无返回值,接收一个Object作为参数)
Thread th = new Thread(pt);
th.Start(true);
Run(false); //传递参数
C# 支持多线程的更多相关文章
- C#写文本日志帮助类(支持多线程)
代码: using System; using System.Configuration; using System.IO; using System.Threading.Tasks; namespa ...
- libcurl的封装,支持同步异步请求,支持多线程下载,支持https
最近在做一个项目,需要用到http get post等 需求分析需要做到同步和异步,异步请求的返回以可选的回调通知的方式进行. 本人以Linux为例,一步一步的来实现. 配置并且编译libcurl我以 ...
- 自动更改IP地址反爬虫封锁,支持多线程(转)
8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...
- 发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
应用场景 多线程在需要批量处理一些任务的时候相当有用,也更加有利于充分利用现有计算机的能力.所有主流的开发语言都支持多线程. 默认情况下,PowerShell作为一个脚本语言,是不支持多线程操作的,虽 ...
- 使用plenv安装perl,并使其支持多线程
plenv与pyenv.rbenv等都是同类型软件中非常好用的,这三个软件不仅命名类似,操作方式也相差无几,节约了很多学习的成本,所以非常推荐: 安装使用plenv: git clone git:// ...
- JAVA在语言级支持多线程
进程:任务 任务并发执行是一个宏观概念,微观上是串行的. 进程的调度是有OS负责的(有的系统为独占式,有的系统为共享式,根据重要性,进程有优先级). 由OS将时间分为若干个时间片. JAVA在语言级支 ...
- php不支持多线程怎么办
PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编 ...
- 支持多线程的Redis6.0来了
支持多线程的 Redis 6.0 版本于 2020-05-02 终于发布了,为什么 Redis 忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有线程安 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
随机推荐
- camera闪光灯校准
1. adb shell 2. setprop z.flash_ratio 1 3. 全黑环境下,请将手机固定,对着白墙10cm,固定. 4. 点击拍照,然后手机会自动打闪2(Duty num)次(其 ...
- POJ1182 食物链 —— 种类并查集
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- 小程序-demo:快速开始
ylbtech-小程序-demo:快速开始 1.返回顶部 1.app.js //app.js App({ onLaunch: function () { // 展示本地存储能力 var logs = ...
- Objective-C NSString/NSMutableString
创建于完成: 2018/02/05 总览: http://www.cnblogs.com/lancgg/p/8404975.html 字符串类 简介 字符码: Unicode NSString ...
- [Swift通天遁地]一、超级工具-(5)使用UIWebView(网页视图)加载本地页面并调用JavaScript(脚本)代码
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Akka源码分析-CircuitBreaker(熔断器)
熔断器,在很多技术栈中都会出现的一种技术.它是在分布式系统中提供一个稳定的阻止嵌套失败的机制. 该怎么理解呢?简单来说,在分布式环境中,如果某个计算节点出现问题,很容易出现失败的逆向传到或整个系统的雪 ...
- (矩阵快速幂)51NOD 1242斐波那契数列的第N项
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, ...
- ntp多台主机时间同步
通俗的讲,多台主机ntp时间同步,就是自定义集群中一台机器(我们这里叫它server)与网络时间同步,然后其它主机与server主机时间同步 另外,ntp时间同步机制不是我们想象的那样直接同步,而是“ ...
- java-异常简介
1.简介 ############################################################### ############################### ...
- [Usaco2003 Open]Lost Cows
Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...