【C#多线程编程实战笔记】一、 线程基础
创建线程
Thread :所执行的方法不能有参数。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread t = new Thread( print_1);
t.Start(); print_2();
Console.ReadLine(); } static void print_1()
{
Console.WriteLine("线程开始...");
string[] a = {"a","b","c","d","e","f","g"}; for (int i = ; i < ; i++)
{ Console.WriteLine(a[i]);
}
} static void print_2()
{
Console.WriteLine("主线程调用方法...");
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
}
}
ParameterizedThreadStart:可以接受一个输入参数
static void Main(string[] args)
{
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start("");
Console.ReadLine();
} static void print_3(object a)
{
Console.WriteLine($"输出{a}");
}
暂停线程
使线程暂停一段时间而不消耗操作系统资源,程序输出之前,将休眠5秒钟,它会尽可能的少占用CPU时间。
static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start(""); Console.ReadLine();
} static void print_3(object a)
{
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine($"输出{a}");
}
等待线程
让程序等待线程中的计算完成,并使用该线程的结果
static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start("");
ts.Join();
Console.WriteLine("主线程继续运行....");
Console.ReadLine();
}
程序运行时,启动了一个耗时的线程。正常情况下,会先打印出 "主线程继续运行....",然后在输出线程中的文字,但我们在程序中调用了ts.Join()方法,该方法允许我们主线程等待线程ts运行完时,主程序再继续运行。借助这个方法可以实现两个线程同步执行步骤,第一个线程会等待另一个线程的结果在继续执行,这时候,第一个线程等待时处于阻塞状态。
线程状态
ts.ThreadState.ToString()
Thread.CurrentThread.ThreadState.ToString()
ps:始终可以通过Thread.CurrentThread静态属性获得当前Thread对象
向线程传递参数
两种:
var t1 = new Thread(TestCounter),其中TestCounter方法必须是obejct类型的单个参数
var t2 =new Thread(()=>TestCounter2(12)),使用lambda表达式
【C#多线程编程实战笔记】一、 线程基础的更多相关文章
- python 多线程编程之进程和线程基础概念
多线程编程 在多线程(multithreaded,MT)出现之前,计算机程序的执行都是由单个步骤序列组成的,该序列组合在主机的CPU中按照同步顺序执行.无论是任务本身需要按照步骤顺序执行,还是整个过程 ...
- 【C#多线程编程实战笔记】二、 线程同步
使用Mutex类-互斥锁 owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态 name为定义的互斥锁名称,在整个操作系统只有一个命名未CSharpThreadingCookb ...
- C#多线程编程实战1.6线程优先级
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- 《Java多线程编程实战指南(核心篇)》阅读笔记
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
随机推荐
- iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
- Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法
我们都知道oracle数据库的强大,并且好多企业或者教学用到数据库时都会推荐使用.但是Qt因为版权问题没有封装oracle数据库专用驱动,网上也有一大堆说法和教程,但是或多或少的都有问题.下面废话不多 ...
- TypeScript基础数据类型
Typescript与Javascript 二者的区别 作为前端开发的基础语言javascript已经深入人心,人人皆知.作为变成入门的最简单语言,Javascript语言以动态.弱类型语言而著名,学 ...
- ASP.NET程序运行出现WebDev.WebServer40.exe已停止工作解决方法(netsh winsock reset)
问题描述:在开发系统时候运行程序突然报出"WebDev.WebServer40.exe已停止工作"的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.O ...
- NYOJ--102--次方求模(快速求幂取模)
次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...
- sysstat -6.0.2 lib not install
执行oracle安装包./setup.sh 后跳出,无法执行数据库的安装,并提示类似下面 的错误信息-- ERROR:===wed Aug 15 08:43:23 CST 2012===sysstat ...
- javascript今生前世
事情得从一个chrome控制台中的无意打印说起. 众所周知,js共六种数据类型,string.number.undefined.boolean.object.null.当然javascript还准备了 ...
- IOS数据持久化之归档NSKeyedArchiver
IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...
- electron + vue 实践项目
github地址 本地安装环境准备 安装node: * https://nodejs.org/en/download/ 配置webpack: npm install -g webpack(sudo权限 ...
- java protected修饰符理解
Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...